2012-08-04 91 views
2

考虑下面的代码:jQuery选择快捷方式

$(div.now span).text('now'); 
$(div.30days span).text('30days'); 
$(div.60days span).text('60days'); 

如果我要缩短东西,这似乎是做在顺理成章的事情:现在

$('span', 'div.now, div.30days, div.60days').text(some text); 

,在缩短版,我想将文本设置为类名的文字,但似乎无法弄清楚如何去做。有任何想法吗?我意识到这不是一个理想的事情,但只是在JQuery中进行实验。

回答

3

尝试以下操作:

$("div span").each(function(){ 
    $(this).text($(this).closest('div').attr('class')) 
})​ 

DEMO

+0

这是非常good.I实际上做了一个版本,这一点,但想它可能会更短。我喜欢这个。我没有想到最接近的。很酷。非常感谢。 – 2012-08-04 03:50:55

+0

@DavidWhitten只是小心嵌套的div。如果你有'

''最接近'的电话会选择最里面的div。您可以使用与上下文相同的选择器(在您的原始示例中)作为“最接近”的参数以避免这种情况。有关示例,请参阅[我的回答](http://stackoverflow.com/a/11805742/520779)。 – mgibsonbr 2012-08-04 03:56:16

+0

@DavidWhitten欢迎您。 – undefined 2012-08-04 03:57:04

0

使用,而不是在text参数字符串的函数:

$('span', 'div.now, div.30days, div.60days').text(function() { 
    return $(this).closest('div.now, div.30days, div.60days').attr("class"); 
}); 

调用它的方式,this被绑定到当前元素(一个span),所以你只需要找回它 父母的 最接近的祖先div的班级,并返回它。

工作示例jsFiddle。请注意,即使嵌套div,它也可以工作(因为它使用与原始上下文相同的closest选择器)。

0

这是你想要的吗?

$('div.now', 'div.30days', 'div.60days').each(function(){ 
    $(this).text(this.className); 
}); 

0

使用each不需要循环。

做到这一点的最佳方法如下。

$('div span').text(function() { 
    return this.parentNode.className; 
}); 

demo