2009-05-25 83 views
0

我用一个简单的DOM解析器功能赶使用jQuery XPath选择

例如文档的所有节点的XPath的资料,HTML是:

<div> 
    <div>Everyday People</div> 
    <div>My name is ACE</div> 
    <div>Hello world</div> 
</div> 

解析DOM存储阵列arr XPath中信息:

<script type="text/javascript" src="js/jquery/js/jquery-1.3.2.min.js"></script> 
<script type="text/javascript" src="js/jquery/js/xpath-selector.js"></script> 

<script type="text/javascript"> 
function get_XPath(elt) 
{ 
    var path = ''; 
    for (; elt && elt.nodeType == 1; elt = elt.parentNode) 
    { 
    var idx = $(elt.parentNode).children(elt.tagName).index(elt) + 1; 
    idx > 1 ? (idx='[' + idx + ']') : (idx=''); 
    path = '/' + elt.tagName.toLowerCase() + idx + path; 
    } 
    return path; 
} 

var arr = Array(); 
htmlDoc = document; 
x = htmlDoc.documentElement.childNodes; 

for (i=0; i<x.length; i++) 
{ 
    arr.push(get_XPath(x[i])); 
} 
</script> 

后来在脚本我使用存储在arr的值来执行如显示,隐藏或改变续一些功能节点。

<script> 
for(i=0;i<arr.length;i++) 
{ 
    //catch the object reference with the XPath info 
    $(arr[i]) 

} 
</script> 

在上面的片段中,我发现了一个对象,但我无法获取对象引用使用它类似:

$(arr[i]).text(); 

任何帮助将是极大的欢迎。任何人都在使用jQuery XPath选择器?

回答

2

我不太确定你是否需要Xpaths来选择其他元素。因为如果你没有,那么你可以存储的元素自理的ARR数组:

var arr = new Array(); 
htmlDoc = document; 
x = htmlDoc.documentElement.childNodes; 

for (i=0,b=x.length; i<b; i++){ 
    arr.push($(x[i])); 
} 

然后,你可以这样做:

arr[i].text(); 
+0

我知道这个解决方案,但我想知道,如果存储对象的引用比存储xpath informtaion更耗费资源.. sya如果文档很大,那么存储对象引用可能会对资源征税并使应用程序更慢......我是否正确?请分享您的看法...因为我不是JavaScript专家 – Annibigi 2009-05-25 10:28:46

2

,想到的第一个问题是... 为什么你在做这个吗?

您为一个元素生成一个XPath并将它存储在一个数组中,以便稍后可以引用该元素?你为什么不直接存储元素本身?

你想要做的第一件事是什么?看着你的问题,不知道别的,我怀疑可能有比你更容易的方法。