javascript xpath - 获取元素值及其位置,并将结果保存在对象数组中

时间:2013-05-14 18:31:46

标签: javascript xpath

我有一个类似下面的标记(注意:跨度是可选的子元素):

<li class="prices">
   11.11
   <span>1.11</span>
</li>
<li class="prices">
    22.22
</li>
<li class="prices">
   33.33
   <span>3.33</span>
</li>
<li class="prices">
   44.44
</li>
<li class="prices">
   55.55
   <span>5.55</span>
</li>

我想返回跨度内的价格列表及其在对象数组中的位置,所以我得到类似的结果:{pos:0,price,1.11},{pos:2,price,3.33},{pos :4,价格,5.55} JS代码是做什么的? :)

2 个答案:

答案 0 :(得分:0)

假设您有一个包含所有li.prices元素的容器元素:

var container = document.getElementById("container");
var arr = [];
for (var pos = 0; pos < container.children.length; pos++) {
    var li = container.children[pos];
    var spans = li.getElementsByTagName("span");
    var price = spans.length > 0 ? spans[0].innerHTML : "";
    arr.push({pos: pos, price: price});
}

这会将价格存储为字符串,如果li元素中没有span元素,它将使用空字符串。

答案 1 :(得分:0)

你至少需要XPath 2.0才能做到这一点。

为了获得您提议的字符串表示,请使用例如

string-join(
  for $li at $position in //li
  return concat("{ pos: ", $position, ", price: ", $li/span/data(), " }")[$li/span]
, ', ')

如果您更喜欢数组,则可以返回序列中的所有内容并在JavaScript中读取奇数/偶数对:

for $li at $position in //li
return ($position, $li/span/data())[$li/span]