2015-02-09 84 views
0

在我替換了innerHTML事件偵聽器中的IP地址後無法正常工作。iframe - body - 替換innerHTML事件偵聽器無法正常工作

我的代碼:

$("iframe").load(function() { 
    $("iframe").contents().find("b").html(function(_, html) { 
     return html.replace(/(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b)/, '<a href="http://$1/" target="_blank">$1</a>'); 
    }); 
}); 

在IFRAME的innerHTML的一部分

<a id="go" rel="leanModal" name="test_2" href="#event">2</a> <!--this anchor loses event listener --> 
    <li> 
     <ul> 
      <li> 
       <b>MyRouter1 - 192.168.1.1</b> 
      </li> 
      <li> 
       <b>MyRouter2 - 192.168.1.2</b> 
      </li> 
     </ul> 
    </li> 

如何使IP地址的點擊,而無需更換的innerHTML或殺死DOM元素/事件監聽器?

+1

什麼事件偵聽器(S)?你是如何將它們綁定到什麼元素上的? – MrUpsidown 2015-02-09 17:00:45

+1

你想在你插入的'a'節點上使用事件監聽器嗎? – Halcyon 2015-02-09 17:02:32

+0

**不清楚你要問什麼** _請說明你的具體問題或添加額外的細節,以確切地突出你所需要的。正如目前所寫,很難確切地說出你在問什麼。請參閱[如何提問]頁面幫助澄清此問題._ – melancia 2015-02-09 17:08:35

回答

0

如果您想要創建事件偵聽器,即使在HTML更改後仍然可以繼續工作,請查看$ .on()。您可以使用它將偵聽器放置在身體上,當與選擇器相匹配的孩子發生事件時將觸發身體。例如:

$("body").on("click", "a",function(event){ doSomething(); }); 

上面的代碼將調用它的事件處理程序被點擊的a標籤的任何時間。您可以將"a"替換爲您要收聽的元素的選擇器。即使DOM發生更改,它也將繼續工作,因爲聽衆位於body

編輯: 看來您可能正在使用JavaScript來編輯您沒有創建的現有頁面。在這種情況下,編輯標記會很困難,因爲您無法控制事件偵聽器是如何創建的,而不會中斷事件偵聽器。 另外,由於您在現有的a中插入a標籤,因此此特定問題可能與以下事實有關:您的替換會導致無效標記。

作出元素點擊不與內部HTML搞亂,也樣式它,使之清楚,這是可以點擊:

$("b").click(function(event){ 
    //handle your click here 
    //window.location = "http://someurlhere" 
}).css({"color":"blue","cursor":"pointer"}); 
+0

是的,我正在編輯我沒有創建的頁面。 有沒有其他的方法來創建可點擊的IP地址? – Kublach 2015-02-09 17:48:28

+0

我已更新我的答案,以顯示如何處理JavaScript中的點擊事件。您可以在事件處理程序中添加正則表達式邏輯來生成所需的URL。 – devinallenaz 2015-02-09 19:14:44

+0

謝謝。這是解決方案... :) – Kublach 2015-02-10 11:31:20