3

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

例如

<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并删除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类。

这样做的原因是因为我需要多次使用此功能,并且我不想每次指定要删除的类时都编写不同的代码href

我认为该构造将类似于以下内容,尽管我不确定要使用哪些 jQuery 组合来实现它。

$("parant").click(function () {
    $.find(this.childrenClass, function () {
        $.removeAtt("href");   
    });
});
4

2 回答 2

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');
});

在这里,我只是在寻找与任何孩子有共同类的任何元素。如果您愿意,您将不得不调整代码以将其限制为某些元素。

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

演示

于 2013-01-01T23:43:31.753 回答
1
$(".parent").click(function () {
    var $this = $(this),
        klass = $this.children("span").attr("class");
    $("." + klass).find("a").removeAttr("href");
});​

http://jsfiddle.net/366cc/

于 2013-01-01T23:47:05.607 回答