给定以下数组的选择器(每个选择器在我们的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)
何时需要这样的治疗?
答案 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 + ".");
});
答案 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 + ".");
});