我有几个元素,其中一个可能有任意数量的类名 - 其中一个是常见的。
例如:
<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}}
我无法真正解析类名,因为我不知道我正在寻找的特定类,或者我不寻找的类,因为数字和名称的变化取决于
任何指针都非常赞赏
答案 0 :(得分:4)
试试这个
$('.someClassname').click(function(){
var classes = $(this).attr('class').split(" ").join(",.");
alert(classes);
$('.'+classes).not(this).each(function(){
alert($(this).text());
});
});
答案 1 :(得分:2)
您可以这样做:
$('.someClassname').click(function(){
var classes = $(this).attr('class').split(/\s+/);
$.each(classes , function(index, value) {
console.log($('#container').find("."+value));
});
});
答案 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 应该包含你的对象