选择器数组:for循环与$ .each

时间:2013-04-20 05:44:22

标签: jquery

给定以下数组的选择器(每个选择器在我们的css中都是display: none)和for循环:

var arr = ['#home', '#news', '#tidy'];

for (i=0;i<=arr.length;i++){
    $(arr[i]).toggle();
}

使用$ .each(大概是$(this))的等价物是什么?

修改

好的,我理解使用join:

var s = arr.join();
$(s).toggle();

我没有意识到“像许多其他jQuery方法一样在内部调用每个方法,因此不需要使用每个方法”所以+1给你@undefined,但是......

问题是原始提出的,因为即使我:

$.each(arr, function(){
    $(this).text("my id is " + this + ".");
});

我得到未定义(!)错误。 (可以公平地说有.toggle和.insertAfter等,我试图简化)为什么以上不等于:

$('#home').text('my id is #home.');
$('#news').text('my id is #news.');
$('#tidy').text('my id is #tidy.');

编辑2

确定这是一个语法问题 - $(this)需要预先'' +

$('' + this).text('My id is ' + this + '.')

$(this)何时需要这样的治疗?

4 个答案:

答案 0 :(得分:6)

尝试

var arr = ['#home', '#news', '#tidy'];
$(arr.join(',')).toggle();

$(arr.join(','))=&gt; $('#home,#news,#tidy'),选择所有3个元素然后toggle()对所有选定的元素进行操作。


如果你这样做

$.each(arr, function(){
    $(this).text("my id is " + this + ".");
});

this实际上是一个字符串对象而不是一个字符串原语,所以你从$(this)返回的是一个包装字符串对象的jQuery对象,而不是选择器将匹配的元素。将字符串原语''添加到字符串对象会为您提供字符串原语,这就是它以这种方式工作的原因 如果必须更好地使用$.each来使用传递给回调函数的参数,则第一个参数是数组的索引,第二个参数是索引处的值。

$.each(arr, function(index, value){
    $(value).text("my id is " + this + ".");
});

http://jsfiddle.net/2TPLD/

答案 1 :(得分:4)

您可以使用Array对象的join方法:

$(arr.join()).toggle(); // => $('#home, #news, #tidy').toggle();

toggle与许多其他jQuery方法一样,在内部调用each方法,因此无需使用each

答案 2 :(得分:0)

试试这个

您可以使用数组连接方法:

  var arr = ['home', 'news', 'tidy'];

for (i=0;i<=arr.length;i++){
    $('#'+arr[i]).toggle();
}

$.each(arr, function() {
 $("#" + this).toggle();
});

 var arr = ['#home', '#news', '#tidy'];
 $(arr.join(',')).toggle();

答案 3 :(得分:0)

您可以按如下方式使用foreach循环

var arr = [ "one", "two", "three", "four", "five" ];
jQuery.each(arr, function() {
    $("#" + this).text("My id is " + this + ".");

});

或者在你的情况下

var arr = ['#home', '#news', '#tidy'];
  jQuery.each(arr, function() {
    $(this).text("My id is " + this + ".");

});