jQuery:用.attr('id','val')改变'id'是行不通的

时间:2015-02-11 12:46:35

标签: javascript jquery html attr

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

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

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

我正在尝试使用以下jQuery代码将id #my_von更改为#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就在那里,所以我认为没有理由不改变它。

2 个答案:

答案 0 :(得分:0)

永远不要使用children().children(),特别是对于潜在未知的DOM结构(以及ID查找速度最快时)。

通常的问题是get结果中的多个顶级元素,或者它不是以<开头的有效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');

答案 1 :(得分: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();