2

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

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

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

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

编辑

好的,我理解使用加入:

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

4 回答 4

6

尝试

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

$(arr.join(',')) => $('#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/

于 2013-04-20T05:48:07.013 回答
4

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

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

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

于 2013-04-20T05:48:33.530 回答
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();
于 2013-04-20T05:46:07.437 回答
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 + ".");

}); 
于 2013-04-20T05:46:34.570 回答