标识子元素的类并删除所有匹配类的属性

时间:2013-01-01 23:27:22

标签: jquery

我正在尝试删除与所单击元素的子类相匹配的所有元素的属性。

例如

<span class="parent">
    <span class="child1">
        <a href="mylink">text</a>
    </span>
</span>

<span class="child1">
    <a href="mylink">text</a>
</span>

我有代码从被点击的元素中删除href属性。但是,我希望能够删除任何具有相同链接的元素。

我当然可以指定特定的类,但是我想让代码找到被点击的父类的子类,然后查找任何匹配的类并删除href。

在这种情况下,此人会点击.parent元素,代码会搜索子元素的类.child1,删除href并删除{{ 1}}任何元素也具有子元素的匹配类href

因此,对于以下情况,代码将执行相同的操作

.child1

删除所有<span class="parent"> <span class="child2"> <a href="mylink">text</a> </span> </span> <span class="child2"> <a href="mylink">text</a> </span> 类的href

原因是因为我需要多次使用此功能,并且我不希望每次指定要删除.child2的类时都必须编写不同的代码。

我认为构造将是以下几行,但我不确定使用什么组合的jQuery来实现它。

href

2 个答案:

答案 0 :(得分:4)

代码应该是不言自明的:

$('.parent').click(function() {
    // Get all classes from child elements.
    var classes = $(this).children().map(function() {
        return this.className.split(/\s+/);
    }).get();

    // Find any element having one of those classes, find all `a` children
    // and remove the href attribute.
    $('.' + classes.join(',.')).children('a').removeAttr('href');
});

在这里,我只是寻找与任何一个孩子有共同点的任何元素。如果需要,您必须调整代码以将其限制为某些元素。

代码也可以简化,具体取决于你的实际标记(即如果每个父母只有一个孩子,或者每个孩子只有一个班级)。

DEMO

答案 1 :(得分:1)

$(".parent").click(function () {
    var $this = $(this),
        klass = $this.children("span").attr("class");
    $("." + klass).find("a").removeAttr("href");
});​

http://jsfiddle.net/366cc/