2010-10-07 82 views
3

我想要的是让jQuery查看我刚刚单击过的元素(例如ap或li标签),然后将样式应用于所有该元素的实例(因此页面上的所有p标签)。使用jQuery将样式应用于单击元素的所有实例

这是迄今为止我的代码,但它只适用于已单击的单个元素的样式。

$("article *", document.body).click(function (e) { 
    e.stopPropagation(); 
selectedElement = $(this); 
$(selectedElement).css("border", "1px dotted #333") 
}); 

希望得到任何帮助或建议!

+0

避免使用通配符选择器'*'来分配处理程序。通常还有另一种方式。 – user113716 2010-10-08 01:47:20

回答

3
$('article *',document.body).click(
function(e){ 
    e.stopPropagation(); 
    var selectedElement = this.tagName; 
    $(selectedElement).css('border','1px dotted #333'); 
} 
); 

演示在JS Bin,虽然我已经使用了通用选择(因为我只贴了几列(一个一个ol另一个是ul)。

以上响应编辑从注释代码@Peter Ajtai,并链接JS斌演示上月以反映更改:

块周围,一旦你看看标签名前为什么运行如何VAR selectedElement = this.tagName ;.此外,它的电子商务? stopPropagation(),因为你正在调用一个方法d。

+0

完美,谢谢! – 2010-10-07 23:22:51

+0

你很受欢迎。 =) – 2010-10-07 23:23:28

+2

为什么在查看'tagName'之前先运行一次该块?如何'var selectedElement = this.tagName;'。因为你正在调用一个方法,所以它也是'e.stopPropagation()'。 – 2010-10-08 00:40:37

2

我不知道有多少个元素在你的article元素嵌套,但它似乎浪费使用*到单击事件处理程序添加到所有的人都

相反,只需将处理程序添加到article,并获取被点击的e.targettagName即可。

$("article", document.body).click(function (e) { 
    e.stopPropagation(); 
    $(e.target.tagName).css("border", "1px dotted #333") 
}); 

这将是更有效。

+0

+1 - 提高效率 – 2010-10-08 02:06:30

相关问题