2017-05-25 16 views
1

我得到一个错误,我想知道为什么,但不知道如何解决它....例如我的标签/ ID是:了jQuery找出标签属性未工作

shipping_address[country] << i think because of the brackets []

和我的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 Uncaught Error: Syntax error, unrecognized expression: 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

请问您可以添加html代码。 –

+0

你需要在属性选择器内部转义'['和']'。 – Barmar

+0

对不起,添加了HTML和新的JS,所以对我来说试错:) –

回答

5

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

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


jQuery docs

To use any of the meta-characters (such as !"#$%&'()*+,./:;<=>[email protected][]^`{|}~) as a literal part of a name, it must be escaped with with two backslashes: \. For example, an element with id="foo.bar", can use the selector $("#foo\.bar"). The W3C CSS specification contains the complete set of rules regarding valid CSS selectors. Also useful is the blog entry by Mathias Bynens on CSS character escape sequences for identifiers.


FYI:使用text()方法,而不是html()方法来获取文本内容。

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

工作了一种享受!其添加在 html - 只是看看如何解决现在:) –

+0

.text而不是.text :)感谢您的帮助队友 –

+0

在我从HTML转换为文本之前,有一种方法可以从跨度中删除空格,因为它目前像 *,并且很好的清理,因此 *然后以文本形式输出。 。 感谢你的帮助。 –

1

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

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

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