jQuery select元素匹配另一个元素的一个类名

时间:2012-01-10 10:36:33

标签: jquery jquery-selectors

我有几个元素,其中一个可能有任意数量的类名 - 其中一个是常见的。

例如:

<div class='div1 someClassname someOtherClassname'></div>
<div id='container'>
  <div class='div1'>
  </div>
</div>

所以,我有.someClassname触发的事件,但我需要对#container .div1执行某些操作。如何仅使用#container .div1在事件发生时从.someClassname收集的内容选择$('.someClassname').click(function(){ var classes = $(this).attr('class'); // 'div1 someClassname someOtherClassname' var otherElem = $('#container').children().filter(classes); //empty jQuery object });

以下是我正在尝试的事情:

{{1}}

我无法真正解析类名,因为我不知道我正在寻找的特定类,或者我寻找的类,因为数字和名称的变化取决于

任何指针都非常赞赏

8 个答案:

答案 0 :(得分:4)

试试这个

$('.someClassname').click(function(){
    var classes = $(this).attr('class').split(" ").join(",.");
    alert(classes);
    $('.'+classes).not(this).each(function(){
    alert($(this).text());
    });

});

小提琴:http://jsfiddle.net/3rVjN/

答案 1 :(得分:2)

您可以这样做:

$('.someClassname').click(function(){
    var classes = $(this).attr('class').split(/\s+/);
   $.each(classes , function(index, value) { 
        console.log($('#container').find("."+value));
});

});

sample

答案 2 :(得分:1)

如果我理解正确,您需要在类上使用split并根据需要使用点和逗号格式化您的选择器。试一试,如果你还在努力,我会发布一些测试代码。

答案 3 :(得分:1)

我认为你几乎是对的。只需.split变换classes var ,为每个数组元素添加.,然后将数组加回,,以便获得.div1, .otherclassname, etc. }。您可以使用此字符串作为选择器。

这假设你想要关于类的逻辑OR。否则(如果你想要AND),不要加入,,只需将元素粘在一起。

答案 4 :(得分:1)

你不应该滥用class

添加额外的属性,例如HTML5&data-target="div1" .someClassName元素。

<div data-target="div1" class="div1 someClassname someOtherClassname"></div>
<div id="container">
  <div class="div1">
  </div>
</div>

然后在代码中:

$('.someClassname').click(function() {
    var target = $(this).data('target');
    var other = $('#container').children('.' + target);
});

如果没有与div1相关联的实际CSS样式,那么我建议不要使用样式,并在目标div上添加id标记 - 它会更快地匹配按ID而不是按类匹配。

答案 5 :(得分:1)

这是您正在寻找的代码:

    $('.someClassname').click(function(){
    var classes = $(this).attr('class');  // 'div1 someClassname someOtherClassname' 

    var arr = classes.split(" ");
    var filter = [];              

    $.each(arr, function(index, item){
        filter.push("."+item)
    })                      

    var filterStr = filter.join(",")

    var otherElem = $('#container').children().filter(filterStr);  
});       

你遇到的错误是类是一串类名。 jQuery的.filter()方法接受一个选择器。

答案 6 :(得分:1)

几天前我遇到过类似的问题。这对我有用:

// all your element classes 
allClasses = $('yourElement').attr("class").split(/\s+/);

// retrieve desired classes
for (var j = 0; j < allClasses.length; j++) {
   if (allClasses[j] === 'class1' || allClasses[j] === 'class2' || allClasses[j] === 'class3' ) {
    classes = classes+" "+allClasses[j]
    }
   }        
console.log(classes)

如果我想将class1,2,3从元素中拉出来,我会使用它,它可以包含任意数量的具有未知名称的类。

也许有帮助。

答案 7 :(得分:0)

如果我理解你的问题,这应该会有所帮助:

var classes = $(this).attr("class").split(/\s+/);
var obj = $();
for (var i = 0; i < classes.length; i++) { 
    obj = obj.add($("#container ." + classes[i]));
} 

现在 obj 应该包含你的对象