0

文本输入具有数组样式的名称(name="post[2][id]")。我需要使用这个结构名称在 jQuery 脚本中获取这些值。这样我就可以像普通数组一样工作了。

$(document).ready(function(){   
    var data = {};
    data['post'] = {};

    var fields = $("#user input");

    $.each(fields, function(index, field) {
        data[$(field).attr('name')] = $(field).val();
    });

    console.log(data);
});


<div id="user">
    <input type="text" name="name" value="Joy" />
    <input type="text" name="post[1][id]" value="2" />
    <input type="text" name="post[1][name]" value="test" />
    <input type="text" name="post[2][id]" value="3" />
    <input type="text" name="post[2][name]" value="test 2" />
</div>

现在我的名字在数据变量中添加了类似的字符串,所以这很糟糕。我需要这个:

alert(data.post.1.id) // 2
4

1 回答 1

2

简短的回答:

无需扩展 jQuery 的选择器,您可以使用 jQuery 的contains选择器:http ://api.jquery.com/attribute-contains-selector/

像这样

$('input[name*="["][name*="]"]')

把它翻译成英文,意思是,给我input名字包含的 s[]


长答案:

简短的回答实际上应该是足够的。

但仅供参考...

重复使用[name...]是因为一个缺点,我们不能在这样的选择器中使用通配符。

另一个缺点是它们没有定义严格的发生顺序。例如,post]1[也将匹配名称。

如果您确实需要确保名称具有正确的字符串模式,您可以扩展 jQuery 的选择器以执行 Regex 操作以获得更严格的选择规则。

这是一个很好的:http: //james.padolsey.com/javascript/regex-selector-for-jquery/

于 2013-04-24T17:53:02.677 回答