2010-10-11 134 views
3

在WebKit innerText似乎返回用户看到这正是我所需要的元素的文本。Firefox的innerText填充

Firefox是否有任何polyfills?

例如:

 
<div id='1'><br> f<div style='display:none'>no</div>oo   bar</div> 

<script> 
function test(){ return document.getElementById('1').innerText } 
</script> 

功能测试将返回 “\ n富 吧”。

我们的目标是制作一个可编辑的文本区域,其中可以点击链接并突出显示标签,以及在输入时即时创建链接和突出显示。

我的做法是:

在每个KEYUP:

  • 保存光标位置
  • 剪切文本与innerText
  • 解析由innerText
  • 返回的文本的链接和标签
  • 将解析的文本粘贴到可编辑区域
  • 恢复光标位置

谢谢!

+0

我可能会在这里很晚,但肯定所有你想要的是用户编辑当前文本节点?因此,所有需要替换的都是光标所在文本节点的值。如果选择了文本并将其转换为链接(例如),则必须将文本节点替换为文本节点和一个连续选定的元素文本作为文本节点。 – RobG 2012-05-22 03:34:05

回答

1

您可以使用Firefox中Selection对象的toString()方法,其行为与innerText很相似。由于在您的示例中,在提取innerText之前,您已经保存了光标位置,因此以下内容不需要保存和恢复选择,但除此之外,您应该这样做。

function getInnerText(el) { 
    var text = ""; 
    if (typeof window.getSelection != "undefined") { 
     var sel = window.getSelection(); 
     sel.removeAllRanges(); 
     var range = document.createRange(); 
     range.selectNodeContents(el); 
     sel.addRange(range); 
     text = sel.toString(); 
     sel.removeAllRanges(); 
    } 
    return text; 
} 
+0

我喜欢这个解决方案,但是旧选择的丢失是一个不希望的副作用。因为恢复旧选择会触发onfocus事件。阅读innerText属性不会触发onfocus事件 – brillout 2011-01-06 15:04:53