简体   繁体   English

jQuery 搜索匹配字符串并删除父 div

[英]jQuery search matching string and remove parent div

I've an HTML below:我下面有一个 HTML:

<div id="keywords">
    <div id="container0">
        <span id="term010"> this</span>
        <span id="term111"> is</span>
        <span id="term212"> a</span>
        <span id="term313"> phrase</span>
    </div>

    <div id="container1">
        <span id="term014"> exact</span>
        <span id="term115"> match</span>
        <span id="term216"> type</span>
    </div>

    <div id="container2">
        <span id="term017"> this</span>
        <span id="term118"> is</span>
        <span id="term219"> a</span>
        <span id="term320"> broad</span>
    </div>
</div>

and I would like to remove the parent DIV (container) and it's content if a child span contains a word, "this" for example.我想删除父 DIV(容器),如果子跨度包含一个词,例如“this”,它就是内容。
The code should search for the word "this" on all spans and delete the divs with the Id "container0" and "container2".该代码应在所有范围内搜索单词“this”并删除 ID 为“container0”和“container2”的 div。 I already have the Regex but I'm totally lost after that.我已经有了正则表达式,但在那之后我完全迷路了。 I know that I should use querySelector but I never used it before and tried to make it work, but I failed.我知道我应该使用 querySelector 但我以前从未使用过它并试图让它工作,但我失败了。

/\<span id="term[0-9]{3,}"> this<\/span>/gm

Thank you,谢谢,

You can use the :contain() selector.您可以使用:contain()选择器。

 $(document).ready(function(){ $("#keywords").find("span:contains('this')").each(function(){ if($(this).next("span").html()==" is"){ // Watch out for leading space..; $(this);parent("div");remove(); } }); });
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="keywords"> <div id="container0"> <span id="term010"> this</span> <span id="term111"> is</span> <span id="term212"> a</span> <span id="term313"> phrase</span> </div> <div id="container1"> <span id="term014"> this</span> <span id="term014"> deserves</span> <span id="term014"> exact</span> <span id="term115"> match</span> <span id="term216"> type</span> </div> <div id="container2"> <span id="term017"> this</span> <span id="term118"> is</span> <span id="term219"> a</span> <span id="term320"> broad</span> </div> </div>

You can accomplish what you are looking for with jquery by doing something like the following (since you mentioned querySelector , you should know that it can be done with plain javascript as well - see the second code example below).您可以通过执行以下操作来使用 jquery 完成您正在寻找的内容(因为您提到了querySelector ,您应该知道它也可以使用普通的 javascript 来完成 - 请参阅下面的第二个代码示例)。

JQuery: JQuery:

 const spans = $('span'); spans.each(function(index, elem) { if (elem.textContent.toLowerCase().indexOf('this') >= 0) { elem.parentNode.remove(); } });
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="keywords"> <div id="container0"> <span id="term010"> this</span> <span id="term111"> is</span> <span id="term212"> a</span> <span id="term313"> phrase</span> </div> <div id="container1"> <span id="term014"> exact</span> <span id="term115"> match</span> <span id="term216"> type</span> </div> <div id="container2"> <span id="term017"> this</span> <span id="term118"> is</span> <span id="term219"> a</span> <span id="term320"> broad</span> </div> </div>

Javascript only:仅限 Javascript:

 const spans = document.querySelectorAll('span'); for (const span of spans) { if (span.textContent.toLowerCase().indexOf('this') >= 0) { span.parentNode.remove(); } }
 <div id="keywords"> <div id="container0"> <span id="term010"> this</span> <span id="term111"> is</span> <span id="term212"> a</span> <span id="term313"> phrase</span> </div> <div id="container1"> <span id="term014"> exact</span> <span id="term115"> match</span> <span id="term216"> type</span> </div> <div id="container2"> <span id="term017"> this</span> <span id="term118"> is</span> <span id="term219"> a</span> <span id="term320"> broad</span> </div> </div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM