Firefoxとchromeのxpath解釈の違い
document.createElementで作られたノードをdocument.evaluateで探す場合、FirefoxとChromeで違いがあるみたい。
前回の記事と同じく、これも「./」を指定しろ。ってことですかね。
XPath | Firefox | Chrome |
---|---|---|
/sample/value/text() | 取得可 | 取得不可 |
./sample/value/text() | 取得可 | 取得可 |
はて、これはどっちが仕様として正しいんだろう。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <script type="text/javascript"> <!-- function sample() { var element = document.createElement("sample"); element.innerHTML = "<sample><value>hoge</value></sample>"; // Firefox: hoge Chrome: 空文字 alert(document.evaluate("/sample/value/text()", element, null, XPathResult.STRING_TYPE, null).stringValue); // Firefox: hoge Chrome: hoge alert(document.evaluate("./sample/value/text()", element, null, XPathResult.STRING_TYPE, null).stringValue); } //--> </script> </head> <body> <input type="button" onclick="sample();" value="Sample"> </body> </html>