2016-04-25 9 views
-1

我目前正在建設它必須找到一個網站的特定頁面的Chrome擴展特別是登錄/註冊在頁面中,註冊/註冊頁的.innerHTML屬性相匹配, 關於頁面和聯繫我們頁面。JavaScript的正則表達式的任何元素

我想通過首先獲取頁面中的元素列表(我已經完成)來實現此目的。現在我需要檢查元素的innerHTML,使其成爲DOM中的一個葉節點幷包含關鍵字的一部分,並且我正在嘗試使用正則表達式來完成此操作。我設法構建了一個正則表達式,該正則表達式成功返回元素的開始或結束標記(即標記名稱及其屬性)之間的內容,而不是innerHTML。下面是我迄今所做的(與該關於頁面的例子:

var list = document.body.getElementsByTagName("*"); 
var aboutElement = /^[^<.+>].*About.*[^(<.+>]$/i; 

for (var i = 0; i <= list.length; i++) { 
    if ((aboutElement.test(list[i].innerHTML)) || (aboutElement.test(list[i].alt))) { 
     list[i].click(); 
    } 
} 

任何想法,我應該給它添加使得其僅匹配葉節點(不包含其他節點的節點)而不是什麼在開始或結束標籤?我也認爲,我已經做了它會匹配innerHTML中的所有內容,因爲。*部分,所以我可能需要改變它。非常感謝!

+0

您是否嘗試過使用循環來檢查'.textContent'和'.innerHTML'的元素?如果目標元素是'form'元素,則不會有'.innerHTML',而是檢查'name','input'元素的'.value' – guest271314

+0

您可能剛剛救了我。我不知道.textContent。我認爲.innerHTML是獲取元素內容的唯一方法。 我會試一試!謝謝! @ guest271314,我會編輯問題以使其更清晰。 –

+0

爲什麼不訪問元素的innerHTML,textContent或innerText屬性並執行'String.search()'。最糟糕的情況是使用'nodeType == 3'(文本節點)搜索它的子元素並讀取'nodeValue'。我的意思是,在應用正則表達式之前,可能還有更多的方法。 – Redu

回答

0

感謝評論中的兩個答案,我設法解決了這個問題。我使用了.textContent,並如圖所示更改了正則表達式下面,它的工作。

var list = document.body.getElementsByTagName("*"); 
var aboutElement = /^(.*?\s*(\bAbout\b)[^$]*)$/i; 

for (var i = 0; i <= list.length; i++) { 
    if ((aboutElement.test(list[i].textContent)) || (aboutElement.test(list[i].alt))) { 
     list[i].click(); 
    } 
}