0

このコードで何が間違っているのか。

このコードを使用して前の兄弟のクラス名を取得する必要がありますが、未定義になっています。どこが間違っているのでしょうか。

<!DOCTYPE html>
<html>
<head>

<meta charset=utf-8 />
<title>JprevUntil</title>


<script  type="text/javascript" src="jquery-1.7.1.min.js"></script>
<script>
$('.clickme').live('click',function(){
    alert($(this).prevUntil('li.lick').className);
});
</script>
</head>
<body>

  <div>
      <p id="hello">Hello World</p>
      <li class="lick">hello i am li</li>
      <a href="#">heello i am a</a>
      <p class="clickme">click</p>
  </div>

</body>
</html>
4

5 に答える 5

1

あなたが使用することができsiblings()attr()方法は、prevUntiあなたが望むものではありません:

セレクター、DOMノード、またはjQueryオブジェクトによって一致する要素までの各要素の先行するすべての兄弟を取得します。

$('.clickme').live('click',function(){
    alert($(this).siblings('li').attr('class'));
});

classNameはjavasciptコア要素プロパティであり、jQueryオブジェクトでは使用できません。使用する場合は、次のclassNameことを試してください。

$('.clickme').on('click',function() { // you can use on(). live() is deprecated
    alert($(this).siblings('li')[0].className);
});
于 2012-07-06T07:46:25.400 に答える
1

これは、JQueryでラップされたオブジェクトを取得するためです。試してみてください。

$('.clickme').live('click',function(){
    alert($(this).prev('li.lick')[0].className);
});

コードを検査する場合

$(this).prevUntil('li.lick')

あなたが持っている :

-->$(this).prevUntil('li.lick'): e.fn.e.init[1]
       0: HTMLAnchorElement
       context: HTMLParagraphElement
       length: 1
       prevObject: e.fn.e.init[1]
       selector: ".prevUntil(li.lick)"
       __proto__: Object[0]

HTMLAnchorElementはDOMオブジェクトであり、ここでclassNameプロパティを取得できます。

于 2012-07-06T07:48:51.427 に答える
1

これについてjQueryのドキュメントに書かれていることを見てください:

セレクター、DOM ノード、または jQuery オブジェクトによって一致する要素までの各要素の先行するすべての兄弟を取得します。

あなたの要素が含まれていないため、必要なものが得られません。

次のことを試すことができます。

$('.clickme').live('click',function(){
    alert($(this).prevAll('li.lick').get(0).className);
});

アップデート:

あなたが達成したいこと(最も近い前の兄弟を取得すること)は、そのコードで実行できるようです(コードはhereから取得されます):

$('.clickme').live('click',function(){
    alert($(this).prevAll('li.lick:first').attr('class'));
});

フィドル

于 2012-07-06T07:51:43.040 に答える
1

prevUntil APIドキュメントから

* selector、DOM ノード、または jQuery オブジェクトによって一致する要素までの各要素の先行するすべての兄弟を取得します。*

prevUntil が li.lick で停止することを期待していますが、含まれていません。

このjsfiddleでライブを見ることができます

于 2012-07-06T07:53:49.133 に答える
1

このようにしてください: -

ライブデモを参照

HTML:

  <div>
      <li class="lick2">hello i am li 2</li>
      <p id="hello">Hello World</p>
      <li class="lick">hello i am li</li>
      <a href="#">heello i am a</a>
      <p class="clickme">click</p>
      <li class="lick1">hello i am li 2</li>
  </div>​

JS:

$('.clickme').one('click',function(){
    alert($(this).prevAll('li').attr('class'));
});​

出力:

lick
于 2012-07-06T08:00:40.013 に答える