如何通过innerText获取元素

如果我知道文本标签包含什么,如何在html页面中获取标签。 例如:

<a ...>SearchingText</a> 

你必须手动遍历。

 var aTags = document.getElementsByTagName("a"); var searchText = "SearchingText"; var found; for (var i = 0; i < aTags.length; i++) { if (aTags[i].textContent == searchText) { found = aTags[i]; break; } } // Use `found`. 

你可以用xpath来完成这个

 var xpath = "a[text()='SearchingText']"; var matchingElement = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; 

您还可以使用此xpathsearch包含一些文本的元素:

 var xpath = "a[contains(text(),'Searching')]"; 

虽然已经有相当一段时间了,而且你已经(已久)接受了一个答案,但我想我会提供一个更新的方法:

 function findByTextContent(needle, haystack, precise) { // needle: String, the string to be found within the elements. // haystack: String, a selector to be passed to document.querySelectorAll(), // NodeList, Array - to be iterated over within the function: // precise: Boolean, true - searches for that precise string, surrounded by // word-breaks, // false - searches for the string occurring anywhere var elems; // no haystack we quit here, to avoid having to search // the entire document: if (!haystack) { return false; } // if haystack is a string, we pass it to document.querySelectorAll(), // and turn the results into an Array: else if ('string' == typeof haystack) { elems = [].slice.call(document.querySelectorAll(haystack), 0); } // if haystack has a length property, we convert it to an Array // (if it's already an array, this is pointless, but not harmful): else if (haystack.length) { elems = [].slice.call(haystack, 0); } // work out whether we're looking at innerText (IE), or textContent // (in most other browsers) var textProp = 'textContent' in document ? 'textContent' : 'innerText', // creating a regex depending on whether we want a precise match, or not: reg = precise === true ? new RegExp('\\b' + needle + '\\b') : new RegExp(needle), // iterating over the elems array: found = elems.filter(function(el) { // returning the elements in which the text is, or includes, // the needle to be found: return reg.test(el[textProp]); }); return found.length ? found : false;; } findByTextContent('link', document.querySelectorAll('li'), false).forEach(function(elem) { elem.style.fontSize = '2em'; }); findByTextContent('link3', 'a').forEach(function(elem) { elem.style.color = '#f90'; }); 
 <ul> <li><a href="#">link1</a> </li> <li><a href="#">link2</a> </li> <li><a href="#">link3</a> </li> <li><a href="#">link4</a> </li> <li><a href="#">link5</a> </li> </ul> 

你可以使用jQuery :contains()select器

 var element = $( "a:contains('SearchingText')" ); 

使用目前可用的最现代化的语法,可以非常干净地这样做:

 for (const a of document.querySelectorAll("a")) { if (a.textContent.includes("your search term")) { console.log(a.textContent) } } 

或者用一个单独的filter:

 [...document.querySelectorAll("a")] .filter(a => a.textContent.includes("your search term")) .forEach(a => console.log(a.textContent)) 

自然,传统的浏览器不会处理这个问题,但是如果需要传统的支持,你可以使用一个转译器。

function方法。 在检查时返回所有匹配元素的数组并修剪空格。

 function getElementsByText(str, tag = 'a') { return Array.prototype.slice.call(document.getElementsByTagName(tag)).filter(el => el.textContent.trim() === str.trim()); } 

用法

 getElementsByText('Text here'); // second parameter is optional tag (default "a") 

如果你正在通过不同的标签,如跨度或button

 getElementsByText('Text here', 'span'); getElementsByText('Text here', 'button'); 

对于旧的浏览器,默认值tag ='a'将需要Babel

与其他人的回答相比,我发现使用更新的语法稍微短一些。 所以这是我的build议:

 const callback = element => element.innerHTML == 'My research' const elements = Array.from(document.getElementsByTagName('a')) // [a, a, a, ...] const result = elements.filter(callback) console.log(result) // [a] 

JSfiddle.net

虽然有可能通过内部文本获得,但我认为你是走错了路。 是内部stringdynamic生成? 如果是这样的话,你可以给标签一个类,或者更好的是当文本进入时标识。 如果它是静态的,那么它更容易。

我想你需要更具体一些,以帮助我们。

  1. 你怎么find这个? JavaScript的? PHP? Perl的?
  2. 你可以将ID属性应用于标签吗?

如果文本是唯一的(或者真的,如果不是,但是你必须运行一个数组),你可以运行一个正则expression式来find它。 使用PHP的preg_match()将为此工作。

如果您使用Javascript并且可以插入ID属性,那么您可以使用getElementById('id')。 然后您可以通过DOM访问返回的元素的属性: https : //developer.mozilla.org/en/DOM/element.1 。

jQuery版本:


 $('。class_name')。each(function(i){
     var $ element = $(this)[i];

     if($ element.text()=='Your Text'){
         /** 做一点事 */
     }
 });

Interesting Posts