我有一个类似下面的标记(注意:跨度是可选的子元素):
<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代码是做什么的? :)
答案 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]