2006-03-13 ========== JS の XPath ----------- Reference URI: http://lowreal.net/logs/2006/03/13/3 Written Time: 2006-03-13T14:21:48+09:00 Tags: xpath js 前々からいちいちあのクソながったらしい evaluate を書くのがだるかったのでちゃんと関数はさむようにした。 大きなバグがあります。詳細は[XPath, $X function, NSResolver](my:2006/03/16/1)に書きました。以下のコードは非推奨です。 $X = function (exp, context) { if (!context) context = document; var result = document.evaluate(exp, context, null, XPathResult.ANY_TYPE, null); switch ( result.resultType) { case XPathResult.STRING_TYPE : return result.stringVa lue; case XPathResult.NUMBER_TYPE : return result.numberValue; case XPathResult.BOOLEAN_TYPE: return result.booleanValue; case XPathResult.UN ORDERED_NODE_ITERATOR_TYPE: { result = document.evaluate(exp, context, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var ret = []; for (var i = 0, len = result.snapshotLength; i < len ; i++) { ret.push(result.snapshotItem(i)); } return ret; } } return null;}alert($X("//p")); // Array of p elementsalert($X("count(/ /node())")); // => node numberalert($X("count(//body) = 1")); //=> must be true// Firefox が嫌いになる GM スクリプトif ($X("contains(string(/), 'Firefox')")) { alert("I LOVE FIREFOX!");}これでコピペ地獄から開放される。 - [XPath 1.0 チートシート](my:2006/01/03/1)