Jquery:对某些元素运行方法,但不运行其他元素

Mar*_*ark 1 jquery elements

我很难弄清楚如何在某些元素/节点类型上运行方法而不是其他元素/节点类型.

例如,这里有一些HTML:

<div id="parent">
    <div class="subparent">Changing Text
        <div class="no-change">Changing Text</div>
    </div>
    <div class="subparent">Changing Text</div>
        <div class="child">Changing Text
            <div class="no-change">Changing Text</div>
        </div>
    <div class="subparent">Changing Text</div>
</div>
Run Code Online (Sandbox Code Playgroud)

我的方法是这样的:

jQuery.fn.changingtext = function(expr) {
    return this.each(function() {
        this.innerHTML = this.innerHTML
        .replace(/Changing Text/ig, "Edited!")
    });
};
Run Code Online (Sandbox Code Playgroud)

现在我想更改除div.no-change之外的所有内容的文本.最终结果应该是这样的:

<div id="parent">
    <div class="subparent">Edited!
        <div class="no-change">Changing Text</div>
    </div>
    <div class="subparent">Edited!</div>
        <div class="child">Edited!
            <div class="no-change">Changing Text</div>
        </div>
    <div class="subparent">Edited!</div>
</div>
Run Code Online (Sandbox Code Playgroud)

我不知道如何选择父级而不在其子级上运行该方法.任何帮助,将不胜感激.谢谢!

编辑:这是使用Paulo的代码而不是工作:http: //jsbin.com/usaxa

编辑@ Jeff Meatball Yang:嗨,使用你的inplace替换它输出文本而不是html:http: //jsbin.com/idina

我也无法使用其他方法:http: //jsbin.com/aguca

你能提供一个例子吗?

谢谢!

Pao*_*ino 7

我不确定你为什么要编写插件来执行此操作.这将找到<div>#parent中的所有元素,过滤掉那些没有类的元素.no-change,并编辑它们的文本内容:

$('#parent').find('div').not('.no-change').text('Edited!');
Run Code Online (Sandbox Code Playgroud)

这也可以写成:

$('#parent div:not(.no-change)').text('Edited!');
Run Code Online (Sandbox Code Playgroud)

jQuery非常擅长处理元素集,你不必循环遍历它们等等.

编辑:

这应该考虑到CMS的良好观察:

$('#parent').find('div').not('.no-change').each(function() {
    $(this).contents().not('*').eq(0).replaceWith('Whatever');    
});
Run Code Online (Sandbox Code Playgroud)