0

次のようなマークアップがあります (注: スパンはオプションの子要素です)。

<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, price, 5.55 } それを行うための JS コードは何ですか? :)

4

2 に答える 2

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]
于 2013-05-14T21:38:49.427 に答える
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 要素がない場合は空の文字列を使用します。

于 2013-05-14T20:04:12.553 に答える