- var $shadow = new Object();
- /**
- 獲取元素的xpath
- 特性:
- - 轉換xpath為csspath進行jQuery元素獲取
- - 僅生成自然表述路徑(不支持非、或)
- @param dom {String/Dom} 目標元素
- @returns {String} dom的xpath路徑
- */
- $shadow.domXpath = function(dom) {
- dom = $(dom).get(0);
- var path = "";
- for (; dom && dom.nodeType == 1; dom = dom.parentNode) {
- var index = 1;
- for (var sib = dom.previousSibling; sib; sib = sib.previousSibling) {
- if (sib.nodeType == 1 && sib.tagName == dom.tagName)
- index++;
- }
- var xname = dom.tagName.toLowerCase();
- if (dom.id) {
- xname += "[@id=\"" + dom.id + "\"]";
- } else {
- if (index > 0)
- xname += "[" + index + "]";
- }
- path = "/" + xname + path;
- }
- path = path.replace("html[1]/body[1]/","html/body/");
- return path;
- };
- /**
- 根據xpath獲取元素
- 特性:
- - 轉換xpath為csspath進行jQuery元素獲取
- - 僅支持自然表述(不支持非、或元素選取)
- @param xpath {String} 目標元素xpath
- @returns {jQuery Object} 元素/元素集合
- */
- $shadow.xpathDom = function(xpath){
- // 開始轉換 xpath 為 css path
- // 轉換 // 為 " "
- xpath = xpath.replace(/\/\//g, " ");
- // 轉換 / 為 >
- xpath = xpath.replace(/\//g, ">");
- // 轉換 [elem] 為 :eq(elem) : 規則 -1
- xpath = xpath.replace(/\[([^@].*?)\]/ig, function(matchStr,xPathIndex){
- var cssPathIndex = parseInt(xPathIndex)-1;
- return ":eq(" + cssPathIndex + ")";
- });
- // 1.2 版本后需要刪除@
- xpath = xpath.replace(/\@/g, "");
- // 去掉第一個 >
- xpath = xpath.substr(1);
- alert(xpath);
- // 返回jQuery元素
- return $(xpath);
- };