Jquery更改名称属性

时间:2010-04-26 16:53:20

标签: jquery

我有一个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));
                });
            }

        });

    }
});
}); 

4 个答案:

答案 0 :(得分:48)

name无法更改,因为一旦您修改了id,后续表达式中的选择器(使用未修改的 ID)就不会选择任何内容:)< / p>

$("#" + 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);
...

答案 1 :(得分:3)

卡里姆是对的,

$("#" + id).attr('classname', 'selected');
$("#" + id).attr('id', 'sel' + rowIndex);
$("#" + id).attr('name', 'sel' + rowIndex);

可以更改为

$("#" + id).attr('name', 'sel' + rowIndex);
$("#" + id).attr('classname', 'selected');
$("#" + id).attr('id', 'sel' + rowIndex);

首先更改名称,$(“#”+ id)与getElementById相同,一旦更改了id,它就不再是你想要引用的元素了

答案 2 :(得分:3)

您可以转到.attr()

,而不是链接
{
    "id" : "sel" + rowIndex ,
    "name" : "sel" + rowIndex
}

当您必须传入(字符串逗号字符串)数据(如.css().animate()

时,许多jQuery函数会接受上述对象

答案 3 :(得分:0)

我遇到了类似的问题,需要重新分配这些属性。我设法通过使用本地方法 setAttribute() 简单地实现了这一点。

var mongoose = require('mongoose')
  , Schema = mongoose.Schema

var PersonSchema = new Schema({
    name    : String
  , age     : Number
  , stories : [{ type: Schema.ObjectId, ref: 'Story' }]
});

var StorySchema = new Schema({
    _creator : { type: Schema.ObjectId, ref: 'Person' }
  , title    : String
  , fans     : [{ type: Schema.ObjectId, ref: 'Person' }]
});

var Story  = mongoose.model('Story', StorySchema);
var Person = mongoose.model('Person', PersonSchema);