2010-10-30 29 views
2

我有一個函數,它讀取元素的內容,用鏈接替換一個單詞,然後將內容重寫回元素。顯然這意味着之前設置的所有事件都會丟失。查找並替換元素的內容而不會丟失事件

有誰知道一個函數/方法可以找到並替換元素的內容而不會丟失事件?

編輯:如果不使用庫

這裏是我當前的代碼,不破壞事件,而是變成<,例如,爲&lt;,所以我不能追加HTML。這是我得到的最接近:

element.appendChild(document.createTextNode(content)); 

我原來的代碼工作,但擺脫了事件:

element.innerHTML += content; 
+0

看到代碼將有所幫助。 – Saul 2010-10-30 17:15:08

+0

好的抱歉,在新的編輯 – Olical 2010-10-30 17:21:03

+0

那麼如何將包含可替換文本的部分用單獨的標籤進行包裝並將其與需要保留其事件的周圍元素隔離? – Saul 2010-10-30 17:33:42

回答

5

使用jQuery,你可以用text()方法

var str = $('#element-id').text(); 
str = yourReplaceFunction(str); 
$('#element-id').text(str); 

編輯:

另一個選項是innerHTML屬性。它不是很優雅,但仍然有效。

var strElem = document.getElementById('element-id'); 
var str = strElem.innerHTML; 
str = yourReplaceFunction(str); 
strElem.innerHTML = str; 

EDIT2:

另一種辦法是包你想單獨的標籤內替換文本,例如<span>

<div id="container"> 
    <a id="link-with-events">Link</a> 
    <span id="replaceable">The Text Gets Replaced</span> 
    <a id="more-links-with-events">Another Link</a> 
</div> 

然後,您只需訪問並替換span標籤的內容,而不改變周圍的元素。

+0

那麼問題是我正在編寫一個庫,所以我不想使用jQuery,所以你知道任何find + replace方法,不涉及銷燬事件監聽器嗎? – Olical 2010-10-30 16:58:33

+0

你是指含有元素的事件嗎?還是你指的是內容中定義的事件被替換? – Saul 2010-10-30 17:04:51

+0

我不明白使用'innerHTML'屬性會有什麼不好的地方。 – 2010-10-30 17:05:31