2013-05-17 53 views
4

如何使用favelet或腳本注入器在隨機網站的頁面上獲取點擊元素的innerHTML? 舉例來說,單擊此頁面的「問題問題」上方將返回以下內容:<div class="nav mainnavs " style=""> <ul style=""> <li style="">單擊元素的innerHTML

我試着編輯從slayeroffice.com的favelet,其最初的目的是刪除所選元素的孩子,但它似乎並沒有工作。

javascript: 
var b = new Array(); 
var c= 1; 
var d; 
document.onkeydown = ck; 
el = document.getElementsByTagName('*'); 
for (i = 0; i < el.length; i++) 
    { 
     if (el[i].tagName.search(/(HTML|BODY)/i) == -1) 
     { 
      if (el[i].title) el[i].oldTitle = el[i].title; 
      el[i].title = el[i].innerHTML; 
      d=String(el[i].innerHTML); 
      el[i].onclick = function(e) 
      { 
       t = this; 
       if (window.event) e = window.event; 
       if ((t == e.target) || (window.event)) alert(d); 
       if (window.opera) e.stopPropagation(); 
       return false; 
      }; 
      el[i].onmouseover = function() 
      { 
       if (!c) return; 
       c = 0; 
       t = this; 
       b[t] = t.style.backgroundColor; 
       t.style.background = '#DADADA'; 
      }; 
      void(
      el[i].onmouseout = function() 
      { 
       t = this; 
       t.style.backgroundColor = b[t]; 
       c = 1; 
      }); 
     } 

    } 
function ck(e) 
{ 
    k = window.event ? window.event.keyCode : e.keyCode; 
    if (k == 27) 
    { 
     for (i = 0; i < el.length; i++) { 
      if (el[i].tagName.search(/(HTML|BODY)/i) == -1) 
      { 
       el[i].oldTitle ? el[i].title = el[i].oldTitle : el[i].removeAttribute('title'); 
       el[i].onclick = null; 
       el[i].onmouseover = null; 
       el[i].onmouseout = null; 
       el[i].style.backgroundColor = b[t]; 
      } 
     } 
    } 

} 

有沒有解決方法?

回答

7

您可以將一個事件附加到文檔onclick處理程序。無需遍歷頁面上的每個元素。點擊冒泡吧...

document.onclick = function(event) { 
    var target = event.target || event.srcElement; 

    alert (target.innerHTML); 
}; 

不過我建議使用一個更好的方法用於連接事件處理程序比將「=」,因爲它會覆蓋先前定義的事件,可能是網頁運行至關重要。

我以前也使用過這個片段更好的事件,而不jQuery的附加...

var bindEvent = function(elem ,evt,cb) { 
     //see if the addEventListener function exists on the element 
     if (elem.addEventListener) { 
      elem.addEventListener(evt,cb,false); 
     //if addEventListener is not present, see if this is an IE browser 
     } else if (elem.attachEvent) { 
      //prefix the event type with "on" 
      elem.attachEvent('on' + evt, function(){ 
       /* use call to simulate addEventListener 
       * This will make sure the callback gets the element for "this" 
       * and will ensure the function's first argument is the event object 
       */ 
       cb.call(event.srcElement,event); 
      }); 
     } 
    } 

您只要致電...

bindEvent(document,'click', function(event) { 
    var target = event.target || event.srcElement; 

    alert (target.innerHTML); 
}); 
+0

並非所有的瀏覽器在這種情況下都有'target' – epascarello

+0

請參閱編輯..應處理IE –

+0

或者您可以剛完成var'target = event.target || event.srcElement;' – epascarello

2

您將在for循環中遇到i範圍問題。

i將等於el.length點擊發生時。

但是爲什麼使用一個變量,當你可以讀取它

變化

if ((t == e.target) || (window.event)) alert(d); 

if ((t == e.target) || (window.event)) { 
    alert(this.innerHTML); 
} 

而且你不應該被檢查在window.event srcElement?

+0

謝謝,這正是我腦子裏想的時候我嘗試了不同的代碼修改。可悲的是,它也表明最初的代碼並不適合這項任務。 –