如何使用jquery删除名称以下划线开头的元素?

时间:2011-08-16 11:00:01

标签: jquery

<form id="myForm">
 <input type="hidden" name="_myCheckbox01" value="on">
 <input name="myCheckbox01" type="checkbox" value="true">
</div>

和伪javascript:

   var myNewForm = $("#myForm").remove("type hidden and name begins with _");

这样做的正确方法是什么?我想将它们保存在原始dom中并创建一个新对象,除非没有下划线的命名元素,否则它是相同的。

(我这样做的原因是因为spring-mvc form标签创建了隐藏的输入,但是我正在序列化表单,然后发布为json - 然后转换为java对象,pojo没有字段开始不想要的所以它会导致问题)。

4 个答案:

答案 0 :(得分:3)

使用 CSS属性selector

开头
$('input[name^="_"]').remove();

将从DOM中删除元素。

修改

您可以从下划线开始克隆<input>,从克隆中删除下划线并将其附加到DOM。

var hidden = $('#myForm input[name^="_"]');
var clone = hidden.clone();
clone.attr('name', clone.attr('name').substring(1));
hidden.after(clone);

需要编辑才能使用多个_起始元素。

编辑2 对于多个<input> s

$('#myForm input[name^="_"]').each(function() {
    var clone = $(this).clone();
    clone.attr('name', clone.attr('name').substring(1));
    $(this).after(clone);
});

答案 1 :(得分:1)

那么你会使用如下所示的CSS Selector,然后执行removeNode操作,

$("*[name^=_]").remove();

解构以上:

$("*")会让你获得Dom中的所有元素,

$("*[name]")会使用name属性

为您提供Dom中的所有元素

$("*[name^=_]")会产生_作为起始名称属性的所有元素。

现在开始删除它们

$("*[id^=_]").remove();

答案 2 :(得分:1)

var myNewForm = $("#myForm").filter(':not(input[name^="_"]');

我还使用serializeObject()插件,因此我使用的最终代码看起来像这样:

   var myNewForm = $("#myForm").filter(':not(input[name^="_"]').serializeObject();

答案 3 :(得分:0)

要选择名称以_开头的隐藏字段,您可以使用以下内容:

$('#myForm input[type="hidden"][name^="_"]').remove();

如果您只想从元素的名称中删除_字符,这应该有效:

$('#myForm input[type="hidden"][name^="_"]').prop('name', function(i, oldname) {
    return oldname.substr(1);
});

请参阅: