使用普通Javascript按元素包含的字符串获取元素ID

使用普通Javascript按元素包含的字符串获取元素ID,javascript,Javascript,如何根据元素包含的字符串获取元素ID <span id="th67">This the string I need to match</span> 这是我需要匹配的字符串 我不能使用JQuery或任何其他Javascript库来实现这一点 我需要做一个硒测试 我没有意识到如果没有我的库,我在JS中是多么无用 谢谢大家的帮助。好吧,如果你知道你要找什么样的标签,你可以: var spans = document.getElementsByTagName('span'),

如何根据元素包含的字符串获取元素ID

<span id="th67">This the string I need to match</span>
这是我需要匹配的字符串
我不能使用JQuery或任何其他Javascript库来实现这一点

我需要做一个硒测试

我没有意识到如果没有我的库,我在JS中是多么无用


谢谢大家的帮助。

好吧,如果你知道你要找什么样的标签,你可以:

var spans = document.getElementsByTagName('span'), targetId;
for (var i = 0; i < spans.length; ++i) {
  if (spans[i].innerText === stringToMatch) {
    // found it ...
    targetId = spans[i].id;
    break;
  }
}
if (targetId) {
  // ... do whatever ...
}
var span=document.getElementsByTagName('span'),targetId;
对于(变量i=0;i

我想,如果您想玩得开心,可以构造一个xpath查询。

下面是一个简单的递归函数:

function findByText(node, text) {
    if(node.nodeValue == text) {
        return node.parentNode;
    }

    for (var i = 0; i < node.childNodes.length; i++) {
        var returnValue = findByText(node.childNodes[i], text);
        if (returnValue != null) {
            return returnValue;
        }
    }

    return null;
}
这将导致
target
null
,或者它是一个DOM节点,您可以使用
target.id
获取其id


.

如果目标浏览器支持XPath,则可以执行简单的XPath查询:

// Find an element by the text it contains, optionally
// starting at specified parent element.
function getElementByText( text, ctx)
{
  return document.evaluate("//*[.='"+text+"']", 
     ctx || document, null, XPathResult.ANY_TYPE, null).iterateNext();
}
那就跑吧

var myElement = getElementByText( "This is the string I need to match" );
if ( myElement )
{
  // do something with myElement.id
}

那很优雅。我能得到所有包含字符串的元素吗?我尝试了
(myElement=getElementByText(searchString))
,但它似乎产生了一个无休止的循环。
var myElement = getElementByText( "This is the string I need to match" );
if ( myElement )
{
  // do something with myElement.id
}