我有一个JQuery函数尝试更改元素的id,name和class。 id和class的改变似乎是有效的,但是由于某些好奇的原因,尝试改变元素的名称永远不会起作用。
$(document).ready(function () { $("table select").live("change",function () { var id = $(this).attr('id'); if ($(this).attr('classname') != "selected") { var rowIndex = $(this).closest('tr').prevAll().length; $.getJSON("/Category/GetSubCategories/" + $(this).val(),function (data) { if (data.length > 0) { $("#" + id).attr('classname','selected'); $("#" + id).attr('id','sel' + rowIndex); $("#" + id).attr('name','sel' + rowIndex); // this never works var position = ($('table').get(0)); var tr = position.insertRow(rowIndex + 1); var td1 = tr.insertCell(-1); var td2 = tr.insertCell(-1); td1.appendChild(document.createTextNode('SubCategory')); var sel = document.createElement("select"); sel.name = 'parent_id'; sel.id = 'parent_id'; sel.setAttribute('class','unselected'); td2.appendChild(sel); $.each(data,function (GetSubCatergories,Category) { $('#parent_id').append($("<option></option>"). attr("value",Category.category_id). text(Category.name)); }); } }); } }); });
解决方法
该名称无法更改,因为一旦修改了id,后续表达式中的选择器(使用未修改的id)就是没有选择:)
$("#" + id).attr('id','sel' + rowIndex); $("#" + id).attr('name','sel' + rowIndex); // this can't ever work
尝试将它们链接在一起,以保持当前选择的参考:
$("#" + id).attr('id','sel' + rowIndex) .attr('name','sel' + rowIndex);
或者,重新排序语句,以便在更改id之前更改名称(和/或其他方式):
$("#" + id).attr('name','sel' + rowIndex); $("#" + id).attr('id','sel' + rowIndex);
您还可以将选择分配给变量:
var $el = $("#" + id); $el.attr("id",'sel' + rowIndex); ...