我收到错误并认为我知道为什么但不确定如何解决它....例如我的标签/ 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>
答案 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, '\\$&');