0

ページ内にノードの配列を生成したいと思います。これには、範囲の可能なすべてのstartContainerが含まれます。

treeWalkerを使用しようとしましたが、実際のstartContainerノードよりも深いノードが表示されます。次に例を示します。

<p>For those keeping count at home, by the way, the <a target="_blank" href="http://msdn.microsoft.com/en-US/windows/apps/br229516.aspx">Windows 8 Developer Preview site</a> still happily talks about "Metro style app development,"; even though <a target="_blank" href="http://www.istartedsomething.com/20120816/microsofts-new-rule-no-metro-named-apps/">rumor has it</a> that Microsoft is now banning all apps with the word "Metro" in their name from the Windows Store.</p>

(techcrunch.comから取得)

したがって、私のツリーウォーカーは次を返します。

['For those keeping count at home, by the way, the ','Windows 8 Developer Preview site',' still happily talks about "Metro style app development,"; even though ','rumor has it',' that Microsoft is now banning all apps with the word "Metro" in their name from the Windows Store.']

(スプリット)

しかし、次のものを取得しようとすると、window.getSelection()。getRangeAt(0).startContainer.textContentが取得されます。

['For those keeping count at home, by the way, the Windows 8 Developer Preview site still happily talks about "Metro style app development,"; even though rumor has it that Microsoft is now banning all apps with the word "Metro" in their name from the Windows Store.']

(分割されません)

startContainerがより深く(分割されて)いないのはなぜですか?treeWalkerのように?

ツリーウォーカーのコードは次のとおりです。

var walker = document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, function(node) {
    if (node.nodeType == 3) {
        return NodeFilter.FILTER_ACCEPT;
    } else if (node.offsetWidth && node.offsetHeight) {
        return NodeFilter.FILTER_SKIP;
    } else {
        return NodeFilter.FILTER_REJECT;
    }
}, false);
4

1 に答える 1

2

リンクの1つなど、要素全体を選択したと思います。重要な事実はstartContainer、選択から取得された範囲のがテキストノードであることが保証されていないということです。

要素全体が選択されている場合、一部のブラウザは、要素の親ノードの子にまたがって選択を報告します。たとえば、多数の連続する画像の1つにまたがる選択の場合、これは不可欠です。選択範囲が以下のHTMLの2番目の画像のみを含むと想像してください。

<div><img src="1.jpg"><img src="2.jpg"><img src="3.jpg"></div>

この場合、選択された範囲には、要素と1および2を参照するプロパティがstartContainerあり、コンテナのプロパティのインデックス1と2の子の間で伸びる範囲を表します。endContainer<div>startOffsetendOffsetchildNodes

于 2012-10-02T13:24:43.117 に答える