2015-02-11 196 views
0

首先,代碼已被簡化並且只包含必要的部分。jQuery:使用.attr('id','val')更改'id'將不起作用

所以我有以下的HTML文件(single_lesson.html):

<tr class="my_lessons"> 
    <td> 
     <select name="my_von" id="my_von"></select> 
    </td> 
</tr> 

我試圖改變#my_vonid#my_von1有以下的jQuery代碼:

jQuery.get('single_lesson.html', function(my_html) 
{ 
    jQuery(my_html).children().children('#my_von').attr('id', 'my_von1'); 
}, 'html'); 

它將無法正常工作,我不知道爲什麼。


console.log(jQuery(my_html).children().children('#my_von'));提供了以下陣列:

[select#my_von, prevObject: e.fn.init[7], context: undefined, jquery: "1.11.1", constructor: function, selector: ""…] 

如果我打開這個數組有另一個數組稱爲select#my_von。如果我打開這個有幾個字段,並且id: "my_von"就是其中之一。該字段id在那裏,所以我沒有看到它不會改變的原因。

+0

你得到的HTML爲一個字符串,然後它包裝'的jQuery(my_html)',然後你改變了ID,但是你不jQuery對象做任何事情,並且原始字符串不會被更改,因此再次包裝它,您會得到完全相同的輸出結果? – adeneo 2015-02-11 12:48:21

+1

你沒有改變'my_html'的內容,這個id會在通過調用'jQuery(my_html)'創建的dom對象中被更新,但它不會被更新到存儲在'my_html'中的字符串中。 – 2015-02-11 12:48:48

回答

0

謝謝Arun P Johny的評論。我沒有意識到jQuery(my_html)是一個對象。我通過簡單地將對象jQuery(my_html)存儲爲一個變量,然後在更改id後將其HTML內容存儲爲另一個變量來解決此問題。我的代碼如下:

var my_html_jquery = jQuery(my_html); 
my_html_jquery.children().children('#my_von').attr('id', 'my_von1'); 
my_html = my_html_jquery.html(); 
0

千萬不要使用children().children(),特別是對於潛在未知的DOM結構(以及ID查找速度儘可能快時)。

通常的問題是獲取結果中有多個頂級元素,或者它不是以<開頭的有效HTML。最簡單的解決方法是把它包在一個虛設的元素第一:

jQuery.get('single_lesson.html', function(my_html) 
{ 
     var $div = jQuery('<div>').html(my_html); 
     $div.find('#my_von').attr('id', 'my_von1'); 
     // Now do whatever you want to do with $div.html() or $div.children(); 
}, 'html'); 
+0

@adeneo:這就是我得到的剪切和粘貼...更正:) – 2015-02-11 12:56:15

相關問題