2014-01-10 49 views
0

當我單擊HTML頁面中的元素時,需要獲取XPath表達式。該解決方案是非常有幫助的:https://stackoverflow.com/a/5178132/1718124從Javascript中的多個元素獲取XPath

function createXPathFromElement(elm) { 
var allNodes = document.getElementsByTagName('*'); 
for (segs = []; elm && elm.nodeType == 1; elm = elm.parentNode) 
{ 
    if (elm.hasAttribute('id')) { 
      var uniqueIdCount = 0; 
      for (var n=0;n < allNodes.length;n++) { 
       if (allNodes[n].hasAttribute('id') && allNodes[n].id == elm.id) uniqueIdCount++; 
       if (uniqueIdCount > 1) break; 
      }; 
      if (uniqueIdCount == 1) { 
       segs.unshift('id("' + elm.getAttribute('id') + '")'); 
       return segs.join('/'); 
      } else { 
       segs.unshift(elm.localName.toLowerCase() + '[@id="' + elm.getAttribute('id') + '"]'); 
      } 
    } else if (elm.hasAttribute('class')) { 
     segs.unshift(elm.localName.toLowerCase() + '[@class="' + elm.getAttribute('class') + '"]'); 
    } else { 
     for (i = 1, sib = elm.previousSibling; sib; sib = sib.previousSibling) { 
      if (sib.localName == elm.localName) i++; }; 
      segs.unshift(elm.localName.toLowerCase() + '[' + i + ']'); 
    }; 
}; 
return segs.length ? '/' + segs.join('/') : null; 
}; 

上面提到的JavaScript返回以下的XPath計算器的主網頁上的鏈接:

id("question-summary-21052053")/div[@class="summary"]/h3[1]/a[@class="question-hyperlink"] 

但我需要這樣的XPath的所有鏈接的列表:

.//*/div[@class="summary"]/h3[1]/a[@class="question-hyperlink"] 

如何更改上面的JavaScript代碼以返回上面的XPath? XPath必須與HtmlAgilityPack協同工作。

非常感謝!

+0

你不想使用jQuery? – Jason

+0

jQuery沒問題。我編輯了我的問題。還沒有在我的項目中使用過jQuery。 – jimbo

回答

0

使用jQuery試試這個...

var elements = $("#question-summary-21052053 div[class='summary'] h3:first a[class='question-hyperlink']"); 
+0

不知道這可以幫助我。我需要從上面提到的Javascript函數獲取XPath。我再次編輯了這個問題,以便更清楚。 – jimbo