获取包含文本的元素的id

时间:2014-07-15 12:28:02

标签: javascript html

如何从文本中获取div id? 我只从div发现了Text。

<div id="randomdiv">Text</div>

5 个答案:

答案 0 :(得分:4)

如果你正在使用jQuery,那么事情真的很容易。

var src = "Text"; // what to look for

$('*:contains("'+src.replace(/\"/g, '\"')+'")') // search all elements containing that text, also replace double quotes because it might break the selector
    .filter( function(){ 
        return $(this).text()==src;  // check for exact matches (this is slow btw)
    })
    .first() // retrieve the first element. you have to adjust if you're looking for all elements
    .attr('id'); // retrieve the id. this is semantic. it's faster to use [0].id instead of this

如果您不使用jQuery,那么您可能会有30-40行代码。

答案 1 :(得分:4)

var divId = $("div:contains('Text')").attr('id');

alert(divId);  //divId is the div's id you need;

答案 2 :(得分:1)

在纯JavaScript中,它实际上也很简单。

这是一个小帮助函数,它返回一个基于搜索字符串的id数组。 如果第二个参数为true,它将执行基本的部分搜索,而不是严格检查。

<强>的Javascript

NodeList.prototype.forEach = Array.prototype.forEach;

function getElementIdsByText(search, partial) {

    var elements = document.querySelectorAll("[id]");
    var ids = [];

    elements.forEach(function(element) {
        if (!partial && element.textContent === search) {
            ids.push(element.id);
        }

        if (partial && element.textContent.indexOf(search) !== -1) {
            ids.push(element.id);
        }
    });

    return ids;
}

console.log(getElementIdsByText("Text"));
console.log(getElementIdsByText("Fo", true));

<强> HTML

<div id="randomdiv">Text</div>
<div id="randomdiv2">Text</div>
<div id="fooDiv">Foo</div>

<强>输出

["randomdiv", "randomdiv2"]
["fooDiv"] 

当然您不需要NodeList.prototype.forEach = Array.prototype.forEach;,您也可以使用slice方法将其转换为普通数组,但理论上不保证slice方法(不是我知道这个是不是!)。

http://jsfiddle.net/A4XkY/2/

答案 3 :(得分:0)

  

如果你有一个现代浏览器,你可以随时使用XPATH,因为它有   基于内容的搜索。

     

这是一个例子:

document.evaluate('//*[text()="' + string + '"]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE).snapshotItem(0);
     

对于旧版浏览器,你可以用类似的东西来填充XPATH   http://llamalab.com/js/xpath/

来自:https://stackoverflow.com/a/9558906/2806799

在您的情况下,您可以使用:

document.evaluate('//*[text()="' + string + '"]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE).snapshotItem(0).id;

答案 4 :(得分:-1)

var id = $(":contains('Text')").attr('id');

这将返回包含文本“Text”

的所有元素