如何在DocumentFragment中获取子节点?

3

我需要知道我提取的内容中是否包含“span”标签。

JavaScript代码部分,从文本区域获取选择内容:

...
selection = this.getWin().getSelection().getRangeAt(0);
content = selection.extractContents();
alert(content)// this gets documentFragment
alert(content.firstChild)//null
fontEl = document.createElement ("span")
fontEl.appendChild(content);
alert(fontEl.outerHTML)// works ok. but now i have 2 spans if there was one before append

这是我的jsfiddle链接。我测试了更改字体大小的功能,它能够正常工作,但由于这个问题会产生大量无用的标签,造成spam。 http://jsfiddle.net/DCGRg/73/


2
如果DocumentFragment的“firstChild”为空,则表示没有子节点,与任何其他节点相同。 - Tim Down
但如果HTML片段是:<div class="myclass">test</div>? 那么firstChild应该返回div吗? - Feanor
我似乎已经点了踩,但我并没有这个意图,也没有记忆中做过这样的事情,在我的声望历史记录中也没有-1的迹象。如果您编辑您的问题,那么我可以取消我的显然的踩。 - Tim Down
取消了负评。对此我很抱歉。 - Tim Down
1个回答

0

你的代码离正确还不远。这是一个更新后的演示:

http://jsfiddle.net/DCGRg/73/

这是相关的代码片段:
var font_size = combo.getValue();
var selection = this.getWin().getSelection();
if (selection.rangeCount > 0) {
    var range = selection.getRangeAt(0);
    var content = range.extractContents();
    var fontEl = this.getWin().document.createElement("span");
    fontEl.style.fontSize = font_size + 'px';
    fontEl.appendChild(content);
    range.insertNode(fontEl);
    selection.selectAllChildren(fontEl);
}

但它正在大量垃圾邮件空的HTML标记。我该如何修复它? - Feanor
谢谢,虽然它比我的好,但我需要修复文本上的标签滥用问题。请检查“HTML SOURCE”按钮以查看。该按钮是从右边数第二个。 - Feanor
@Feanor:这个比较棘手。你需要更加微妙的方法,涉及更密切地与DOM进行交互。这是一个非平凡的问题。 - Tim Down

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接