【问题标题】:jQuery : Perform same action for each element on a pagejQuery:对页面上的每个元素执行相同的操作
【发布时间】:2016-02-04 09:11:54
【问题描述】:

我已经阅读了很多相关问题,列表如下,但似乎没有一个适用于我的情况。

我希望元素周围出现边框。我已经尝试了下面的代码,但是 $("*") 选择了层次结构中的所有元素,并且边框也出现在父元素周围,这不是我想要的。我只想选择被点击的元素,而不是父元素。

这是脚本

$( "*" ).each(function(){ 
    $(this).on( "mousedown", function(){
        $(this).css("border", "1px solid red");
    }); 

$(this).on( "mouseup", function(){
        $(this).css("border-style", "none");
    });
});

这里列出了我的一些“不太有用”的研究:- javascript - Best Way to Get All DOM Elements with jQuery

jquery get all form elements: input, textarea & select

All Selector (“*”) | jQuery API Documentation

【问题讨论】:

标签: javascript jquery


【解决方案1】:

使用* 选择器非常低效,因为它为DOM 中的每个 元素添加了一个事件处理程序。您可以使用事件传播来执行此操作,方法是将事件处理程序放在document 上并使用target 属性引用触发事件的元素。试试这个:

$(document).mousedown(function(e) {
    $(e.target).css('border', '1px solid red');
}).mouseup(function(e) {
    $(e.target).css('border', '0');
});

Example fiddle

【讨论】:

  • @RameshPareek 如果您认为这个答案今天对您有所帮助,您可以考虑接受这个答案。 :)
  • 你会建议 $(e.target).css('border', '0');而不是 $(this).css("border-style", "none"); ?
  • 是的,但是 SO 说您必须再等 3 分钟才能接受答案。事实上,我已经尝试了 3 次来接受它。 :)
  • @RameshPareek 您必须使用e.target,因为this 将引用document
猜你喜欢
  • 2015-12-21
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多