操作方法

Shibuya

.JS

Fast JS XPath Engine for IE (and Safari2)

amachang: seijro@gmail.com

Agenda

Rediscover XPath

8 年。

世界が XPath の真の実力を発見するのに要した時間である。

1999 年、W3C により勧告された XPath は、「なにコレ読めねえwww XPath きめえwww」などと言われもした、

ともすれば不遇とすらいい得る歳月を経て、あたりのそこここに満ち充ちていた「DOM まじめんどくせえ」という思いによって、ふたたび表舞台に招来された。

XPath は、DOM ツリーの「ancestor」と「descendant」、「lastChild」と「firstChild」とを取り結ぶ、もっとも古くてもっとも新しい、そして、もっとも重要な技術だ。次の 8 年を自らの手で創り出すために、私は DOM 3 XPath に注目した。

XPath

XPath のメリット

XPath のメリット

標準

標準

// case 1
var result = document.evaluate(
    '//div[@class="foo"]', document, null, 7, null);

// case 2
var expr = document.createExpression(
                    '//div[@class="foo"]', null);
var result = expr.evaluate(document, 7, null);

標準

// 結果のインタフェースは第 5 引数で変わる
var result = document.evaluate(
    '//div[@class="foo"]', document, null, 7, null);

var len = result.snapshotLength;
for (var i = 0; i < len; i ++) {
    alert(result.snapshotItem(i)); // [object Node]
}

標準

// 結果のインタフェースは第 5 引数で変わる
var result = document.evaluate(
    '1 + 1 * 3', document, null, 1, null);

alert(result.numberValue); // 4

標準

// 結果のインタフェースは第 5 引数で変わる
var result = document.evaluate(
    'concat("foo", "bar")', document, null, 2, null);

alert(result.stringValue); // foobar

標準

ネイティブ実装

ネイティブ実装

厳密性

厳密性

<ul>
    <li><input type="checkbox" /></li>
    <li><input type="checkbox" /></li>
    <li><input type="checkbox" /></li>
</ul>

厳密性

var xpath = '//li[input[@checked]]';

var result = document.evaluate(
                    xpath, document, null, 7, null);
/*
    CSS セレクタだと
    input:checked で input は選択できるが
    その親を選択はできない。(結果を条件にできない)
*/

厳密性

/*
    もちろん、 jQuery を使えばできる
    すばらしい!
*/
var result = $('input:checked').parent('li');

厳密性

厳密性

<div id="fooTarget barTarget"
    class="sortable movable draggable">
<div class="fooWrapper">
<div class="fooInnerWrapper">
<div class="fooContent">
<div class="fooInnerContent">
<div class="fooArea"></div>
<div class="barArea"></div>
</div></div></div></div></div>

厳密性

その他

Fast JS XPath Engine

というわけで

IE で速く動く

XPath エンジン作ってみた

Fast JS XPath Engine

Fast JS XPath Engine

DEMO

jquery.plugin.fullxpath

jQuery.xpath = function(selector, context) {
    var result = document.evaluate(selector, ...);
    /* ... result to array ... */
    return jQuery.find(result, context)
};

jquery.plugin.fullxpath

$('//div//ul')
    .xpath('li[input[@checked]]')
        .addClass('foo')
    .end()
    .xpath('li[input[not(@checked)]]')
        .addClass('bar')
    .end()
.end()

TODO

という訳でリリースは

Coming Soon

プレゼンツールの紹介

こんなプレゼンツールを

作ったりもしてます

まとめ

もし興味があれば

XPath エンジン

使ってみてください><

http://amachang.art-code.org/js/xpath/javascript-xpath-0-1.js

おしまい!