1

<li>後でループで使用したい特定の要素のセットを収集しようとしています。ただし、正しい構文がないようです。デバッグコンソールから、オブジェクトが未定義であると通知されます。誰かが私が間違っていることを教えてもらえますか?

var all_help_triggers = [];
$(".canned-triggers > li").each(function() { all_help_triggers.push($(this)) });
all_help_triggers[0].click(function(){alert('hi!');})
4

3 に答える 3

3

あなたは単にこれを行うことができます:

// save selected jQuery objects into variable
var all_help_triggers = $(".canned-triggers > li");

// get first element in jQuery object, and assign a click handler
all_help_triggers.eq(0).click(function(){
    alert('hi!');
});

編集(追加のコメントに基づく):

インデックスを取得するには、.index()

$('.canned-content > li').hide();

$('.canned-triggers > li').click(function() {
    var i = $(this).index();
    $('.canned-content > li').eq(i).show();
});

http://jsfiddle.net/samliew/erp2J/11/

ページの読み込み時にリストを非表示にする場合は、CSSで行う必要があります。それ以外の:

$('.canned-content > li').hide();

その行を削除し、代わりにこのCSSを追加します。

.canned-content > li { display: none; }
于 2013-02-27T03:33:07.010 に答える
1

each()を使用する場合、「this」値はそれが繰り返す「each」要素を参照します。したがって、追加の配列を使用する代わりに、そのようなものを試す必要があります...

$(".canned-triggers > li").each(function() { 
    $(this).click(function( {
       alert('hi!')
    });
});

あなたのコメントに気づきました:

フィドルの例を参照してください:http://jsfiddle.net/ScRqc/

<ul class="canned-triggers">
    <li data-element="#li1">heyo1</li>
    <li data-element="#li2">heyo2</li>
    <li data-element="#li3">heyo3</li>
</ul>

<ul class="canned-content">
    <li id="li1">I'm heyo content 1</li>
    <li id="li1">I'm heyo content 2</li>
    <li id="li2">I'm heyo content 3</li>
</ul>


$('.canned-content > li').hide();

$('.canned-triggers > li').click(function() {
    var toggleElement = $(this).data("element");
    $(toggleElement).show();
});
于 2013-02-27T03:34:41.447 に答える
-1

セレクターが何かを返すかどうかを確認する必要があります。

また、jQueryコレクションは配列に似ています。つまり、明示的に配列に変換する必要はありません...for問題なくループスルーできます。

ただし、それでもJavaScript配列が必要な場合は、次のコードを使用して行うことができます。

var all_help_triggers = $.makeArray( $(".canned-triggers > li") );

ここ$.makeArrayでの方法に関するその他のドキュメント

于 2013-02-27T03:35:28.427 に答える