使用Javascript选择特定单词?
我有以下代码选择元素的全部内容:使用Javascript选择特定单词?,javascript,Javascript,我有以下代码选择元素的全部内容: function selectElement(element) { var sel = window.getSelection(); sel.removeAllRanges(); var range = document.createRange(); range.setStart(element, 0); range.setEnd(element, 1); sel.addRange(range); cons
function selectElement(element) {
var sel = window.getSelection();
sel.removeAllRanges();
var range = document.createRange();
range.setStart(element, 0);
range.setEnd(element, 1);
sel.addRange(range);
console.log(range);
}
我称之为:
selectElement(document.getElementById("input"));
如果输入如下所示:
<div id="input">
Lorem Ipsum Dolor Sit
</div>
我想设置setStart和setEnd会起作用,但我只能从0-1进行设置
我可以选择节点内的文本而不是节点本身吗?您需要从元素内的文本节点中选择它
range.setStart(element.childNodes[0], 0);
range.setEnd(element.childNodes[0], 7);
将整个div节点传递给setStart/setEnd,这就是为什么只能在0和1之间进行选择。您必须传递div的第一个子节点,这是一个文本节点。例如,要选择Ipsum:
range.setStart(element.firstChild, 7);
range.setEnd(element.firstChild, 12);
注意:跨浏览器处理范围一直都是一团糟。我已经有一段时间没有处理它了,但上次我检查时,让库这样的库处理讨厌的细节似乎是个好主意。您处理的是整个元素,它是一个具有不同对象作为属性的对象。要处理字符串,必须首先获取Stringtext子元素。可以通过从元素数组的子节点获取子节点来实现这一点。如果在选择对象上直接使用JavaScript字符串属性或方法(如length或substr),则如果该对象没有该属性或方法,则会导致错误,如果没有该属性或方法,则可能会返回意外结果。是否可以使用函数选择整个HTML。然后使用正则表达式解析所需的字符串。不,我需要通过window.getSelection.setRange在浏览器中实际选择文本。你知道我如何使用rangy进行同样的操作吗?我不知道,但可能在他们的文档中。
range.setStart(element.firstChild, 7);
range.setEnd(element.firstChild, 12);