jQuery:使用 .attr('id', 'val') 更改 'id' 将不起作用

jQuery: Changing 'id' with .attr('id', 'val') won't work

首先,代码已经简化,只包含必要的部分。

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

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

我正在尝试使用以下 jQuery 代码将 #my_vonid 更改为 #my_von1

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 就在那里,所以我看不出为什么它不会改变。

切勿使用 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');

感谢 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();