1
我已經嘗試過使用rangy進行這種操作的方法,下面是我最近的。在Chrome和IE8中完美工作(就像我試過的許多其他版本一樣),但Firefox堅定地拒絕打球。Rangy替換父母
test()函數應用於在頁面上選擇一些粗體文本後單擊的按鈕。我想看到的是:
[WrappedRange("blah":0, "blah":4)] [object Text]
[WrappedRange("blah":0, "blah":4)] [object Text]
但在:
<b>blah</b> or <strong>blah</strong>
與
<span style='font-weight:bold'>blah</span>
在Chrome和執行console.log線替換和FF它的工作原理FF:
[WrappedRange("blah":0, "blah":4)] [object Text]
[WrappedRange(<SPAN>[1]:0, <SPAN>[1]:1)] [object HTMLSpanElement]
。
function test()
{
var sr=rangy.getSelection().getRangeAt(0);
var oldParent=sameTextParent(sr);
console.log(sr.inspect()+" "+sr.commonAncestorContainer);
if(oldParent)
{
var newParent=document.createElement("span");
newParent.style.fontWeight="bold";
newParent.appendChild(sr.cloneContents());
oldParent.parentNode.replaceChild(newParent,oldParent);
rangy.getSelection().selectAllChildren(newParent);
sr=rangy.getSelection().getRangeAt(0);
console.log(sr.inspect()+" "+sr.commonAncestorContainer);
}
}
function sameTextParent(r)
{
var s=r.startContainer,e=r.endContainer;
if(s.nodeType!=3||e.nodeType!=3){console.log("not TEXT node!");return null}
return (s.parentNode==e.parentNode)?s.parentNode:null;
}
如果有人能告訴我我的方式錯誤,例如,將在FF工作,它在IE8和Chrome的方式,我將永遠感激。
謝謝!這解決了它! – poby