使用Plain Javascript获取它包含的String的元素ID

时间:2011-04-24 14:51:54

标签: javascript

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

<span id="th67">This the string I need to match</span>

我无法使用JQuery或任何其他Javascript库来执行此操作。

我需要进行硒测试。

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

感谢大家的帮助。

3 个答案:

答案 0 :(得分:7)

如果您要定位的浏览器支持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
}

答案 1 :(得分:6)

好吧,如果你知道你正在寻找什么样的标签,你可以这样做:

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

如果你想得到想象,你可以构建一个xpath查询,我想。

答案 2 :(得分:3)

这是一个简单的递归函数:

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;
}

将其用作:

var target = findByText(document, "This the string I need to match");

这最终会导致targetnull,或者它是一个DOM节点,您可以使用target.id获取其ID。

See it in action