javascript - SurroundContents() 进行更改 `live` ?

标签 javascript html range

实例链接@ jsfiddle & jsbin .

所以这个函数:

function symbolize(e){
    var elements = e.childNodes; // text nodes are necessary!
    console.log(elements);
    for(var i=0; i < elements.length; i++){
        t = elements[i];
        var range = document.createRange(), offset = 0, length = t.nodeValue.length;
        while(offset < length){
            range.setStart(t, offset); range.setEnd(t, offset + 1);
            range.surroundContents(document.createElement('symbol'));
            offset++;
        }
    }
}

..应该迭代每个字母并将其包装在 <symbol/> 中元素。但似乎不起作用。

所以我添加了 console.log();就在*.childNodes之后已获取,但正如您将在上面的示例站点中看到的,日志在数组的前面(!)包含 2 个意外元素。是的,正因为如此,我有一种感觉 surroundContents();使更改生效(!)。 但找不到任何相关引用

其中一个元素是空的 Text节点,另一个是我的<symbol/> 。但是,是的,这完全是意外的结果,并且扰乱了函数的其余部分。

可能有什么问题吗?

提前致谢!

更新

哦,看来Chrome上添加了元素,Firefox没有添加元素,但仍然停止了该功能。

最佳答案

Element.childNodes 确实是一个实时列表,否则不可能是这样(这意味着节点列表不正确)。最简单的解决方案是在弄乱它之前卡住(复制)它(通过围绕现有范围)。

var elements = Array.prototype.slice.call(e.childNodes, 0);

https://developer.mozilla.org/en/childNodes它的类型是 NodeList https://developer.mozilla.org/En/DOM/NodeList这些是实时列表

关于javascript - SurroundContents() 进行更改 `live` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7365530/

相关文章:

ios - 如何获取属性字符串的字符串范围?

php - 无法将大型 html5 Canvas 发布到服务器?

javascript - Facebook Facebook 页面插件无法在网页中运行

javascript - 获取范围 slider 输入的宽度

javascript - 如何在不更改 DOM 的情况下计算文本选择的高度

html - <table> 可以同时具有 border-radius 和 border 属性吗?

javascript - 我的 JavaScript 数组没有长度

javascript - 获取子字符串问题(js..或jquery)

javascript - 提交表单时键盘消失

javascript - 在页面更改时保留 url 哈希