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

<a ...>SearchingText</a>

当前回答

从user1106925获取filter方法,如果需要,在<=IE11中工作

你可以将展开运算符替换为:

[] .slice.call (document.querySelectorAll(“a”))

和包含调用a.textContent。匹配(“你的搜索词”)

这很简单:

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

其他回答

您可以使用xpath来实现这一点

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

你也可以使用xpath搜索包含文本的元素:

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

这就行了。 返回包含文本的节点数组。

function get_nodes_containing_text(selector, text) {
    const elements = [...document.querySelectorAll(selector)];

    return elements.filter(
      (element) =>
        element.childNodes[0]
        && element.childNodes[0].nodeValue
        && RegExp(text, "u").test(element.childNodes[0].nodeValue.trim())
    );
  }

你必须徒手穿越。

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`.

简单地将你的子字符串传递到下面一行:

外的HTML

document.documentElement.outerHTML.includes('substring')

内心的HTML

document.documentElement.innerHTML.includes('substring')

你可以使用这些来搜索整个文档并检索包含搜索词的标签:

function get_elements_by_inner(word) {
    res = []
    elems = [...document.getElementsByTagName('a')];
    elems.forEach((elem) => { 
        if(elem.outerHTML.includes(word)) {
            res.push(elem)
        }
    })
    return(res)
}

用法:

用户“T3rm1”在本页上被提到了多少次?

get_elements_by_inner("T3rm1").length

1

jQuery被提到了多少次?

get_elements_by_inner("jQuery").length

3

获取所有包含“Cybernetic”的元素:

get_elements_by_inner("Cybernetic")

我只是需要一种方法来获取包含特定文本的元素,这就是我想到的。

使用document.getElementsByInnerText()获取多个元素(多个元素可能具有完全相同的文本),并使用document.getElementByInnerText()获取一个元素(第一次匹配)。

此外,你可以通过使用元素(例如someElement.getElementByInnerText())而不是文档来本地化搜索。

您可能需要调整它以使其跨浏览器或满足您的需求。

我认为代码是不言自明的,所以我将保持原样。

HTMLElement.prototype.getElementsByInnerText = function (text, escape) { var nodes = this.querySelectorAll("*"); var matches = []; for (var i = 0; i < nodes.length; i++) { if (nodes[i].innerText == text) { matches.push(nodes[i]); } } if (escape) { return matches; } var result = []; for (var i = 0; i < matches.length; i++) { var filter = matches[i].getElementsByInnerText(text, true); if (filter.length == 0) { result.push(matches[i]); } } return result; }; document.getElementsByInnerText = HTMLElement.prototype.getElementsByInnerText; HTMLElement.prototype.getElementByInnerText = function (text) { var result = this.getElementsByInnerText(text); if (result.length == 0) return null; return result[0]; } document.getElementByInnerText = HTMLElement.prototype.getElementByInnerText; console.log(document.getElementsByInnerText("Text1")); console.log(document.getElementsByInnerText("Text2")); console.log(document.getElementsByInnerText("Text4")); console.log(document.getElementsByInnerText("Text6")); console.log(document.getElementByInnerText("Text1")); console.log(document.getElementByInnerText("Text2")); console.log(document.getElementByInnerText("Text4")); console.log(document.getElementByInnerText("Text6")); <table> <tr> <td>Text1</td> </tr> <tr> <td>Text2</td> </tr> <tr> <td> <a href="#">Text2</a> </td> </tr> <tr> <td> <a href="#"><span>Text3</span></a> </td> </tr> <tr> <td> <a href="#">Special <span>Text4</span></a> </td> </tr> <tr> <td> Text5 <a href="#">Text6</a> Text7 </td> </tr> </table>