2011-03-24 52 views
1

予準備的模板的div的克隆訪問使用標識符DOM元素,它分配一個動態ID和其追加到DOM,像這樣: -無法成功後克隆並將其附加

var chat_window_clone_obj = $('div#chat_window_template').clone(); 

cloned_element_id = 'chat_window'+dom_id_separator+session_id; 
$(chat_window_clone_obj).attr('id',cloned_element_id); 
$(chat_window_clone_obj).appendTo("div#chat_windows_holder"); 

但是,後那我不能夠訪問使用其ID克隆的元素(在Firefox檢查,我相信這將是在所有瀏覽器一樣): -

$('div#chat_windows_holder').length // comes 0 
$('div#chat_windows_holder').removeClass("hidden"); //does not work 

不過,我能夠獲得這樣的: -

$(chat_window_clone_obj).length // works 
$(chat_window_clone_obj).removeClass("hidden"); //works 

我在這裏錯過了什麼?我可以在firefox的HTML選項卡中看到正確添加了所需ID的元素。

+0

你爲什麼要將chat_window_clone_obj包裝到$()中? – rsplak 2011-03-24 12:41:34

+1

你不應該用'$()'封裝'chat_window_clone_obj',因爲它會在你每次都克隆這個對象。這意味着即'$(chat_window_clone_obj).attr('id',cloned_element_id);'應該是'chat_window_clone_obj.attr('id',cloned_element_id);' – thwd 2011-03-24 12:48:37

+1

謝謝@Tom你能給一些解釋還是一些鏈接解釋 – 2011-04-20 14:27:20

回答

0

那麼大家問題是,我在使用一些非法字符的dom id,我分配給新克隆的元素。

事情是這樣的 -

dom_id_separator = '%%--%%'; // Character % is illegal 

var chat_window_clone_obj = $('div#chat_window_template').clone(); 
cloned_element_id = 'chat_window'+dom_id_separator+session_id; 

檢查What characters are allowed in DOM IDs?爲合法字符列表。

我正確地分配了動態ID。稍後,我刪除chat_window_clone_obj$()的包裝。

2

當您嘗試按ID選擇它時,您會獲得原始元素 - 就像第一個匹配該ID的元素一樣。 You should not have duplicate IDs in your document。試試這個:

var chat_window_clone_obj = $("div#chat_window_template").clone(); 
chat_window_clone_obj.attr("id", "chat_window_clone"); 
$("#chat_window_clone").doSomething(); 
+1

我認爲他動態生成ID,這可能不是問題。 – jjross 2011-03-24 14:56:50

0

我認爲問題在於你沒有通過正確的ID訪問。 chat_windows_holder是新創建的對象的ID嗎?它看起來不像你的示例代碼。

chat_window_clone_obj的值是什麼?這是您在選擇器中應該使用的值(這是第二個示例工作的原因)。