2011-04-24 88 views
3

如何根據包含的字符串獲取元素ID?通過字符串獲取元素ID它包含使用純正的Javascript

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

我無法使用JQuery或任何其他Javascript庫來做到這一點。

我需要做一個硒測試。

我沒有意識到如果沒有我的圖書館,我在JS中沒用!

謝謝大家的幫助。

回答

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查詢,我猜。

+0

謝謝,這很好地工作。 – Kay 2011-04-24 19:36:32

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,或者是其ID的DOM節點你可以得到target.id

See it in action

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 
} 
+0

那很優雅。任何方式我可以得到所有包含一個字符串的元素?我試過'while(myElement = getElementByText(searchString))',但它似乎產生了一個無限循環。 – 2016-04-25 10:43:20