jQuery每个都找到attr标签不工作

Jam*_*don 1 javascript jquery

我收到一个错误,并认为我知道为什么但不知道如何解决它....例如我的标签/ ID是:

shipping_address [country] <<我认为因为括号[]

我的JS是

$(document).ready(function() {
    $("form :input").each(function(index, elem) {        
        var eId = $(elem).attr("id");
        var label = null;
        if (eId && (label = $(elem).parents("form").find("label[for="+eId+"]")).length == 1) {
            $(elem).attr("placeholder", $(label).html());
            $(label).remove();
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

错误:

js__jquery.js?1419646 ...:1468未捕获错误:语法错误,无法识别的表达式:label [for = billing_address [first_name]]

示例HTML:

<div class="col-sm-6">
    <div class="form-group">
        <label for="card[first_name]">First Name<span>    *     </span></label>

        <input id="card[first_name]" name="card[first_name]" type="text" class="form-control" value="" validate="true">
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

Pra*_*lan 5

将属性值包装在引号或转义元字符中,因为id值包含一些在jQuery中具有特殊含义的元字符.

.find("label[for='" + eId + "']")
//              -^-----------^-
Run Code Online (Sandbox Code Playgroud)


来自jQuery文档:

要使用任何元字符(例如!"#$%&'()*+,./:; <=>?@ [] ^`{|}〜)作为名称的文字部分,必须使用两个反斜杠进行转义:\.例​​如,id ="foo.bar"的元素可以使用选择器$("#foo\.bar").W3C CSS规范包含有关的完整规则集有效的CSS选择器.Mathias Bynens关于标识符的CSS字符转义序列的博客条目也很有用.


仅供参考:使用text()方法而不是html()方法来获取文本内容.

$(elem).attr("placeholder", $(label).text());
//                             ------^^^^^^---
Run Code Online (Sandbox Code Playgroud)