Calender
Sun Mon Tue Wed Thu Fri Sat
1234567
891011121314
15161718192021
22232425262728
2930     
<< September 2019 >>
広告
SEARCH

SELECTED ENTRIES
RECENT COMMENTS
RECENT TRACKBACK
CATEGORIES
ARCHIVES
LINKS
PROFILE
OTHERS
SKYPE
PC: skype.jojo.jp
chat
iPad: iphone.jojo.jp
chat call
THANKS



本日:
昨日:
多言語
広告
 ▼▲ 作業日報 ▼△
    What's under the hood?
<< Youtube | main | ロリポップブログ アカウント停止されました。。 >>
javascript-xpath でIEのみ要素が取得できず
 以前はMSXML2.DOMDocumentで解析していたXMLをクロスブラウザな作りにする必要が出てきて「javascript-xpath.js」を利用してパースしているのですが、以下のようなドキュメントの要素を取得できません。。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<script type="text/javascript" src="./lib/javascript-xpath.js"></script>
<script type="text/javascript">
function btn_1(){
    //ドキュメントの //xml/item は3つ存在するはず
    var b =  document.evaluate( '//xml/item' , document,null,7,null);
    alert( b.snapshotLength );//がIEだと0となる
}
</script>
</head>
<body>
<input type="button" value="test" onClick="btn_1()"/>
<!--ここをデータ要素としてXPathにて取得したい-->
<div style="display:none;">
<xml>
<item id="aa">aaa</item>
<item id="bb">bbb</item>
<item id="cc">ccc</item>
</xml>
</div>
</body>
</html>
 上記XPathではFirefox,Opera,Safari,Chromeでは「3」と正常に取得できますが、IE(Ver7&6)では「0」となります。

 昨日から色々やっているのですが、特定の要素までは取れるのですが、InternetExplorerでは取れない要素があります、ループして取る事にします(xpathの意味なし、、)。jQueryのセレクタで処理したほうがいいのかも。

テストしてみる

リンク:
 ・JavaScript-XPath ¶
 ・Introduction to using XPath in JavaScript
 ・XPath使いのための日本語チートシート 第2版
   
・要素選択テスト2(否定条件が取れない)
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<script type="text/javascript" src="./lib/javascript-xpath.js"></script>
<script type="text/javascript">
function btn_1(){
    //要素選択テスト
    var b =  document.evaluate( '//xml',document,null,7,null);
    alert( b.snapshotLength );// これはOK(3)

    b =  document.evaluate( '//xml[@nm = "a2"]',document,null,7,null);
    alert( b.snapshotLength );// これもOK(1)

    b =  document.evaluate( '//xml[@nm != "a2"]',document,null,7,null);
    alert( b.snapshotLength );//これはNG(2)...IE=0

    b =  document.evaluate( '//xml[not(@nm = "a2")]',document,null,7,null);
    alert( b.snapshotLength );//これもNG(2)...IE=3
}
</script>
</head>
<body>
<input type="button" value="test" onClick="btn_1()"/>

<!--ここをデータ要素としてXPathにて取得したい-->
<div style="display:none;" id="t1">
<xml nm="a1">
<item aaid="aa">aaa</item>
<item aaid="bb">bbb</item>
<item aaid="cc">ccc</item>
</xml>
<xml nm="a2">
<item aaid="dd">ddd</item>
<item aaid="ee">eee</item>
<item aaid="ff">fff</item>
</xml>
<xml nm="a3">
<item aaid="gg">ggg</item>
<item aaid="hh">hhh</item>
<item aaid="ii">iii</item>
</xml>
</div>
</body>
</html>
文字括りを’(シングルクォート)にしたり、属性を./@ にしたり、=の左右に空白を開けてもダメでした。
| yacht | 12:57 | comments(0) | trackbacks(0) |









http://blog.jojo.jp/trackback/1289985