2015-02-11 66 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