我正在努力处理一些我正在研究的jQuery代码,并且我已经将问题缩小到这个简单的例子,这个例子不像我期望的那样:
的jsfiddle: http://jsfiddle.net/HypYT/
HTML
<div id="a">a: <span>A</span></div>
<div id="b">b: <span>B</span></div>
的jQuery
jQuery.each( ["#a", "#b"], function(){
alert(this); // alerts "#a" and "#b"
$(this).hide(); //not working
$('#b').hide(); //working
});
任何人都知道这里发生了什么?
答案 0 :(得分:6)
如果在字符串(或其他基元)上调用函数,this
将成为盒装对象
因此,typeof this
将返回"object"
,而非"string"
这打破了jQuery。 (没有双关语)
你可以通过强制它回到字符串原语来解决这个问题:
$(String(this)).hide()
您可以通过编写
来解决任意基元的问题var self = this.constructor(this);
但是,使用传递给.each()
的第二个参数会更快,因为它会首先避免装箱。
答案 1 :(得分:6)
添加到SLaks回答,您可以使用传递给.each
的arg。见下文,
jQuery.each( ["#a", "#b"], function(idx, el){
alert(this); // alerts "#a" and "#b"
$(el).hide();
//$('#b').hide();
});
或者你可以做
var elToHide = $(["#a", "#b"].join()).hide();
$(elToHide.join()).hide()
答案 2 :(得分:1)
你只需要这样做:
$('#a, #b').hide();
答案 3 :(得分:1)
每个函数都以这种方式工作(http://api.jquery.com/jQuery.each/)<< p>
$.each([52, 97], function(index, value) {
alert(index + ': ' + value);
});
所以在你的情况下
jQuery.each( ["#a", "#b"], function(index, value){
alert(value); // alerts "#a" and "#b"
$(value).hide(); //not working
});
解释是(取自链接) “也可以通过this关键字访问该值,但Javascript将始终将此值包装为Object,即使它是一个简单的字符串或数字值。”