Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript选择特定单词?_Javascript - Fatal编程技术网

使用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);