Получить полный путь к узлу после получения его с помощью запроса XPath в JavaScript - PullRequest
0 голосов
/ 18 июня 2010

У меня есть следующая инструкция в JavaScript:

var firstScene = document.evaluate('//Scene', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);

, поэтому мой вопрос заключается в том, как получить полный путь к узлу firstscene?

1 Ответ

0 голосов
/ 20 июня 2010

Используя эту функцию getXPath () :

  function getXPath(node, path) {
    path = path || [];
    if(node.parentNode) {
      path = getXPath(node.parentNode, path);
    }

    if(node.previousSibling) {
      var count = 1;
      var sibling = node.previousSibling
      do {
        if(sibling.nodeType == 1 && sibling.nodeName == node.nodeName) {count++;}
        sibling = sibling.previousSibling;
      } while(sibling);
      if(count == 1) {count = null;}
    } else if(node.nextSibling) {
      var sibling = node.nextSibling;
      do {
        if(sibling.nodeType == 1 && sibling.nodeName == node.nodeName) {
          var count = 1;
          sibling = null;
        } else {
          var count = null;
          sibling = sibling.previousSibling;
        }
      } while(sibling);
    }

    if(node.nodeType == 1) {
      path.push(node.nodeName.toLowerCase() + (node.id ? "[@id='"+node.id+"']" : count > 0 ? "["+count+"]" : ''));
    }
    return path;
  };

, передайте объект DOM, полученный из firstScene.iterateNext(), методу getXPath(), и он вернет массив со всемиXPATH шаги.

Затем можно использовать метод массива join(), чтобы получить полное выражение XPATH:

getXPath(firstScene.iterateNext()).join("/");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...