「HTMLをクリックするとその部分のXPath文を取得できる」
(ex)/html/body/div[2]/p[3] などの文が取得したい
ということがしたいのですが、検索で探しても指定したXPath文からどうやってHTMLの要素を取得するかということばかりで、
XPath文自体の生成についてはなく、困っています。
FireFoxのextentionでxpatherというものがあるのですが、これに近いと思います。
https://addons.mozilla.org/ja/firefox/addon/xpather/
ブラウザは、Webkit系のchromeとsafariで動作すればIEなどは対象外でも構いません。
どうぞよろしくお願い致します。
取得というか、単にDOMを辿ってXPATHを再構築すればよいかと。
例示されたような形式(タグ名のみ表示、兄弟タグが無ければインデックスは省略、兄弟タグがあればインデックス付き)でしたら以下のような関数でどうでしょう。
function getXpath(element) { if(element && element.nodeType == document.ELEMENT_NODE) { var xpath = arguments.callee(element.parentNode) + '/' + element.tagName; var siblings = []; for(var i = 0; i < element.parentNode.childNodes.length; i++) { var e = element.parentNode.childNodes[i]; if(e.nodeType == document.ELEMENT_NODE && e.tagName == element.tagName) { siblings.push(e); } } if(1 < siblings.length) { for(var i = 0; i < siblings.length; i++) { if(siblings[i] === element) { xpath += '[' + (i+1) + ']'; break; } } } return xpath.toLowerCase(); } return ''; }
>「HTMLをクリックするとその部分のXPath文を取得できる」
まずはクリックイベントを拾って、クリックされた座標を得る必要があります
下記など参照してみてください
http://www.red.oit-net.jp/tatsuya/java/popmenu.htm
http://d.hatena.ne.jp/uupaa/20100401/1270097629
座標を得ることが出来たならばelementFromPointで「その部分」の要素を得られるようになります
http://www.openspc2.org/reibun/javascript2/DOM/element/0001/inde...
最後に document.evaluate の第二引数を document(文書全体) から elementFromPoint(その部分)に替えます
https://developer.mozilla.org/ja/Introduction_to_using_XPath_in_...
こちらもとても勉強になりました!
ありがとうございます。
どうもありがとうございます!
まさにやりたいことでした。