クロスブラウザでRangeオブジェクト扱う3
はてなスターの引用はどんな実装かな?
とHatenaStar.js眺めてたら、引用した文字列と同じ文字列全部がハイライトされる仕様なのね。そうそう重複しないだろうから、こういう割り切ったのもありだと思う。
テキストノードだけ収集するのに、よさげなコード発見(HatenaStar.js 1381行〜1394行)
始めに、全テキストノード収集しとくのはありだな。DOM RangeならcommonAncestorContainerをdocument.bodyの代わりに渡せるのに。
(function(node, parent) { if (isIE && parent && parent != node.parentNode) return; if (node.nodeType == 3) { c.textNodes.push(node); texts.push(node.nodeValue); c.textNodePositions.push(pos); pos += node.nodeValue.length; } else { var childNodes = node.childNodes; for (var i = 0; i < childNodes.length; i++) { arguments.callee(childNodes[i], node); } } })(document.body);
今は、コモンズ・マーカーのソース読んでる。