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

时间:2017-05-25 10:21:01

标签: 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();
        }
    });
});

错误:

  

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>

2 个答案:

答案 0 :(得分:5)

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

.find("label[for='" + eId + "']")
//              -^-----------^-

<小时/> 来自jQuery docs

  

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

仅供参考:使用text()方法代替html()方法获取文字内容。

$(elem).attr("placeholder", $(label).text());
//                             ------^^^^^^---

答案 1 :(得分:1)

属性选择器中的方括号需要转义。

var eId = elem.id.replace(/[\[\]]/g, '\\$&');