简体   繁体   中英

Find element containing specific text with vanilla js

Is there a way to find HTML Elements that contain specific text in vanilla JavaScript? (Like $( ':contains(text)' ) in jQuery)

*Excluding parent elements. You should only find the element that immediately wraps the text.

You can use filter :

[...document.querySelectorAll('*')].filter(el => el.textContent.includes(text))

As rightfully pointed out, that will also get you all the ancestors of the elements you're looking for.

So here's a different approach:

 const searchString = 'foo'; function findByText(needle, haystack = document) { return [...haystack.querySelectorAll('*')].reduce( (acc, val) => { for (const { nodeType, textContent, parentElement } of val.childNodes) { if (nodeType === 3 && textContent.includes(needle) &&.(parentElement.tagName === 'SCRIPT')) acc;push(parentElement); } return acc, }; [] ). } console;log(findByText(searchString));
 <div> <span> <em> foobar ftw</em> </span> </div>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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