javascript - 我如何为 window.getSelection 值分配文本方向 RTL,我试过了但是如何从文本区域的现有值中删除 getSelection

标签 javascript html css

var F1 = document.getElementById('samuText').value;
 
function insertAtCursor() 
{
	if (window.getSelection)
	{
		   sel = window.getSelection();
       document.getElementById('samuText').value = F1+sel // here i need to remove selected value from F1
		 //alert(sel);
      //ocument.getElementById(sel).style.direction = "rtl";
      
	}
}
<textarea id="samuText">Samudrala Ramu</textarea><button onclick="insertAtCursor();">RLM</button>

最佳答案

好的,您应该能够获取所选文本及其索引(文本位置)。我搜索但没有找到任何解决方案来从 <textarea> 获取文本位置.但是this answer提供了一种从 <div> 获取文本位置的方法.你可以 make <div> look like <textarea> .我结合了这两个答案并稍作修改。注意 changeValue函数是操作文本的关键。

<html>
<style>
#main {
    -moz-appearance: textfield-multiline;
    -webkit-appearance: textarea;
    border: 1px solid gray;
    font: medium -moz-fixed;
    font: -webkit-small-control;
    height: 28px;
    overflow: auto;
    padding: 2px;
    resize: both;
    width: 400px;
}
</style>

<body>
<div id="main" contenteditable>Samudrala RamuSamu</div>
<input type="button" onclick="changeValue()" unselectable="on" value="Get selection">
</body>

<script>
function getSelectionCharOffsetsWithin(element) {
    var start = 0, end = 0;
    var sel, range, priorRange;
    if (typeof window.getSelection != "undefined") {
        range = window.getSelection().getRangeAt(0);
        priorRange = range.cloneRange();
        priorRange.selectNodeContents(element);
        priorRange.setEnd(range.startContainer, range.startOffset);
        start = priorRange.toString().length;
        end = start + range.toString().length;
    } else if (typeof document.selection != "undefined" &&
            (sel = document.selection).type != "Control") {
        range = sel.createRange();
        priorRange = document.body.createTextRange();
        priorRange.moveToElementText(element);
        priorRange.setEndPoint("EndToStart", range);
        start = priorRange.text.length;
        end = start + range.text.length;
    }
    return {
        start: start,
        end: end,
        value: range.toString()
    };
}

function changeValue() {
    var mainDiv = document.getElementById("main");
    var sel = getSelectionCharOffsetsWithin(mainDiv);

    var mainValue = mainDiv.textContent;
    var newValue = mainValue.slice(0,sel.start) + mainValue.slice(sel.end) + sel.value;
    mainDiv.textContent = newValue;
}
</script>

</html>

关于javascript - 我如何为 window.getSelection 值分配文本方向 RTL,我试过了但是如何从文本区域的现有值中删除 getSelection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50981148/

相关文章:

javascript - 按一次链接时隐藏链接中的图像

html - 在页面导航被导航栏隐藏

html - 更改 CSS 边框边缘的交汇方式?

html - 带有 CSS 和 HTML 的水平家谱 - 反向

javascript - 为什么我不能使用 javascript 将此表单值重置为空白?

javascript - 如何在 Handlebars 和 Puppeteer 中使用自定义字体?

javascript - 使 window.scrollTo() 物理滚动到某个点

javascript - 使用 Ember.js 和 EmberFire 生成表单

php - 如何从字符串中删除不必要的空格,使 HTML 中没有多余的空格

css - 防止 flex box 元素在包裹后收缩