JavaScript XPath

  • aaa
  • bbb
  • ccc
  • ddd
  • eee
  • fff
  • ggg
  • hhh
  • iii
  • jjj
  • kkk
  • lll
  • mmm
  • nnn
view source

JavaScript

document.getElementsByXPath = function (expression, parentElement){
  console.log(expression);
  var elements = [];
  var xpathResult = document.evaluate(
    expression,
    parentElement || document,
    null,
    XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
    null
  );
  for(var i =0,l=xpathResult.snapshotLength;i<l;i++){
    elements.push(xpathResult.snapshotItem(i));
  }
  console.log(elements);
  return elements;
}


window.addEventListener('load', function(event) {

  document.getElementsByXPath('//*[@id="ul1"]/li').forEach(function(ele, i){
    ele.textContent = ele.textContent + ':' + i;
  });
  

//完全一致
  document.getElementsByXPath('//*/li[text()="kkk"]').forEach(function(ele, i){
    ele.textContent = ele.textContent + ':' + 'text()';
  });
//部分一致(文字列を含む)
  document.getElementsByXPath('//*/li[contains(text(), "j")]').forEach(function(ele, i){
    ele.textContent = ele.textContent + ':' + 'contains()';
  });

//親要素へ
  document.getElementsByXPath('//*/li[contains(text(), "j")]/..').forEach(function(ele, i){
    ele.setAttribute('class', 'parent-selected');
  });


//親要素から、また子要素へ
  document.getElementsByXPath('//*/li[contains(text(), "j")]/../li[text()="nnn"]').forEach(function(ele, i){
    ele.textContent = ele.textContent + ':' + 'nnn';
  });
});

//MDN Document.evaluate()
//https://developer.mozilla.org/ja/docs/Web/API/Document/evaluate#Result_types

//document.getElementsByXPath
//https://www.softel.co.jp/blogs/tech/archives/2067

//XPath Syntax
//https://www.w3schools.com/xml/xpath_syntax.asp

//XPathとCSSセレクター対応表
//https://qiita.com/niusounds/items/8932790c77d781aa8993

CSS

HTML

ページのソースを表示 : Ctrl+U , DevTools : F12

view-source:https://hi0a.com/demo/-js/js-xpath/

ABOUT

hi0a.com 「ひまアプリ」は無料で遊べるミニゲームや便利ツールを公開しています。

プログラミング言語の動作デモやWEBデザイン、ソースコード、フロントエンド等の開発者のための技術を公開しています。

必要な機能の関数をコピペ利用したり勉強に活用できます。

プログラムの動作サンプル結果は画面上部に出力表示されています。

環境:最新のブラウザ GoogleChrome / Windows / Android / iPhone 等の端末で動作確認しています。

画像素材や音素材は半分自作でフリー素材配布サイトも利用しています。LINK参照。

動く便利なものが好きなだけで技術自体に興味はないのでコードは汚いです。

途中放置や実験状態、仕様変更、API廃止等で動かないページもあります。