- 2010-03-18 (木)
- 技術
配列の中から重複した要素を除去するjQuery.uniqueがかっこいいです。
実際には、
document.documentElement.compareDocumentPosition
"sourceIndex" in document.documentElement
document.createRange
のいずれかを持つブラウザを対象としているようです。
ざっくり抜き出してみたのが以下のコード。
サンプルコード
div1とdiv2がいる前提でコードを書いてます。
sortOrder関数にはdocument.createRangeバージョンを設定しています。
解説
まず[div#div1, div#div2, div#div1, div#div2]
という配列をUniqueSort関数に渡して、sortメソッドを呼びます。
すると[div#div1, div#div1, div#div2, div#div2]というふうに重複要素が隣接されます。
あとは配列の前後を比較して等値だったら、sliceで取り除いている感じです。
最終的には[div#div1, div#div2]と重複要素がなくなっている!!
2つの要素のownerDocument.createRange()で要素の場所を特定して、compareBoundaryPointsメソッドで比較しているようなんですが、
compareBoundaryPointsメソッドってoffsetTop、offsetLeftをもとに比較しているのかな?
以下を見てもよくわからなかった。。。
range - MDC
Rangeオブジェクトを使って並び替えるのはなんか斬新で面白かったです。
Trackback:0
- TrackBack URL for this entry
- http://hisasann.com/cgi-bin/mt/mt-tb.cgi/1253
- Listed below are links to weblogs that reference
- jQuery.uniqueのsortOrder関数がかっこいい!! from HouseTect, JavaScriptな情報をあなたに





