5

商品一覧があります。各製品には、タイトルとレビュー リンクがあります。現在、タイトルは個々の製品ページに直接リンクしており、レビュー リンクは別の場所に移動しています。

jquery each ループを使用して各 li を循環させ、タイトル (最初のリンク) から href を取得し、それをレビュー リンク (2 番目のリンク) に適用して、両方が製品ページを指すようにしたいと思います。

単純化されたコードは次のようになります。

<ul>
   <li><a href="product1.html">Product 1</a><a href="review1.html">Review 1</a></li>
   <li><a href="product2.html">Product 2</a><a href="review2.html">Review 2</a></li>
   <li><a href="product3.html">Product 3</a><a href="review3.html">Review 3</a></li>
</ul>

次のようなものになると思いました。

$("li").each(function(){
   var link = $("a:eq(0)").attr('href');
   $("a:eq(1)").attr("href", link);
});

ただし、常に同じ変数「リンク」を使用します。

誰かが私を助けることができますか?

4

5 に答える 5

11

ループthisの各反復のコンテキストを定義する引数として渡します。each()各反復で、this問題の要素を参照します。

$("li").each(function(){
   var link = $("a:eq(0)", this).attr('href');
   $("a:eq(1)", this).attr("href", link);
});
于 2010-05-18T21:19:36.510 に答える
3
$("li").each(function(){
   var link = $(this).find("a:eq(0)").attr('href');
   $(this).find("a:eq(1)").attr("href", link);
});
于 2010-05-18T21:19:34.043 に答える
1

完全に使用する必要を回避する別のオプションは.each、関数を の 2 番目の引数として渡すこと.attrです。

これは次のように機能します。

$('li').find('a:nth-child(2)').attr('href', function(index, href) {
    return $(this).prev('a').attr('href'); // use previous sibling's href
});

基本的に、セレクターに一致する各要素を受け取り、それを関数に渡し、href属性をその関数の結果に設定します。関数には引数が渡​​されます。1 つ目は一致するセット内のインデックス ($('li a:nth-child(2)')ここ) で、2 つ目は属性の現在の値です。あなたの特定のケースでは、どちらも気にしませんが、多くの場合、現在の値に基づいて属性を変換したいので、便利です。

どちらを使用するかは完全に好みの問題です。jQuery セットを使用すると、直接使用しなくても多くのことを実行できます.each

于 2010-05-19T01:14:12.970 に答える
0

これは、選択liのコンテキストとしてを使用していないためです。a

これを試して:

$("li").each(function(){
    var a = $('a',this);
    var link = a.filter(":eq(0)").attr('href');
    a.filter(":eq(1)").attr("href", link);
});
于 2010-05-18T21:21:07.073 に答える
0

試す:

 $("li").each(function(){
    var link = $("a:eq(0)", this).attr('href');
 $("a:eq(1)", this).attr("href", link);
  });
于 2010-05-18T21:22:11.870 に答える