选择与当前事件目标具有相同类名的所有元素

时间:2014-05-27 08:12:05

标签: javascript jquery jquery-selectors

我有多个类的元素

<div id="d1" class="class1 class2"></div>
<div id="d2" class="class1 class2"></div>

在与上述div绑定的事件处理程序中,我想选择所有类似的元素,即从事件目标中获取类名,然后选择具有相同类名的所有元素。

我想出了这个:获取class属性&amp;用.拆分或替换空格似乎有点粗糙。我是否缺少一个可以轻松处理此问题的jquery功能?

classStr      = $(e.currentTarget).attr('class')   

//Method 1 - split at space & prepend dot & join
classSelector = (classStr.split(/\s+/).map(function(v){return '.'+v})).join('')

//Method 2 - Replace space with '.' and prepend '.'
classSelector = '.' + classStr.replace(/\s+/,'.')

desiredElem   = $(classSelector)

1 个答案:

答案 0 :(得分:2)

  

我是否错过了一个可以轻松处理此问题的jquery功能?

我不这么认为,不。你的方法#2可能是最直接的。请注意,该类反映为className,因此您无需执行$(e.currentTarget).attr('class')操作。所以:

var classSelector = '.' + e.currentTarget.className.replace(/\s+/g, '.');
var desiredElems  = $(classSelector)

但要注意IE8及以下版本没有currentTarget。如果你在jQuery事件处理程序中执行此操作,则可能需要this

var classSelector = '.' + this.className.replace(/\s+/g, '.');
var desiredElems  = $(classSelector)

(即使在IE8(live example)上,jQuery也能正确提供currentTarget,所以如果你在jQuery事件处理程序中,{{ 1}}很好。)