ページ内にノードの配列を生成したいと思います。これには、範囲の可能なすべての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);