jquery重命名所有属性

时间:2012-10-10 20:30:02

标签: jquery

  

可能重复:
  How can I change HTML attribute names with jQuery?

我有一个大/复杂的表单,根据之前选择的问题提供不同的可用问题。

为了尝试保持这个有点组织,我有一些具有相同名称的重复输入。这就产生了一个问题,即即使它们被隐藏在页面下方的输入也会覆盖可见输入。

为了防止这种情况,我设置了所有隐藏的输入,而不是data-name属性。

问题 如何更改属性名称。 E.g:

name

2 个答案:

答案 0 :(得分:2)

$('input[data-name]').each(function(){
    $(this).attr('name', $(this).attr('data-name')); //does the switch
    $(this).removeAttr('data-name'); //clears out the old one if you need to
});

答案 1 :(得分:2)

鉴于上述HTML加价,我建议:

$('input').each(
    function(i,el){
        var data = $(el).data();
        for (datum in data) {
            if (!el[datum]) {
                el[datum] = data[datum];
                el.removeAttribute('data-' + datum);
            }
        }
    });​

JS Fiddle demo

这使用jQuery data()方法创建一个对象,其中包含数据(如果存在),附加到each()方法迭代的当前jQuery对象。

实际上,在上面的示例中,if检查当前元素是否已经具有相同名称的属性(因此name如果已存在则不会被覆盖)并且,如果它不存在,则创建该属性/属性。

显式覆盖预先存在的属性:

$('input').each(
    function(i, el) {
        var data = $(el).data();
        for (datum in data) {
            el[datum] = data[datum];
            el.removeAttribute('data-' + datum);
        }
    });​

JS Fiddle demo

参考文献: