我正在选择匹配特定格式(edit-invoices-##_[a-zA-Z_-]
)的所有div,然后抓取它们的ID以用于更多代码,如果我执行以下操作,则此方法有效:
var fields = $("#invoicesTable div[id|='edit-invoices']").map(function() {
return this.id;
}).get();
但如果我在发票之后添加连字符,它将失败(不返回结果):
var fields = $("#invoicesTable div[id|='edit-invoices-']").map(function() {
return this.id;
}).get();
这个重要的原因是,如果我有以下div,他们需要区别对待,所以我必须单独选择它们:
edit-invoices-39_id
edit-invoices_products-39_id
任何人都可以告诉我为什么尾随连字符会破坏代码吗?
答案 0 :(得分:2)
尝试^=
var fields = $("#invoicesTable div[id^='edit-invoices-']").map(function() { return this.id; }).get();
正如安德烈亚斯指出的那样,|=
实际上会搜索该字符串并使用连字符,所以当你添加尾随连字符时,jQuery正在寻找编辑发票 - 我相信。
答案 1 :(得分:2)
这是因为|=
代表prefix selector
选择具有指定属性且具有值的元素 等于给定的字符串或以该字符串开头,后跟a 连字符( - )
因此,如果您使用此选择器,它会在给定值的末尾添加-
。
例:
$("#invoicesTable div[id|='edit-invoices']")
:将从edit-invoices
开始查找标识为id
或edit-invoices-
的元素,$("#invoicesTable div[id|='edit-invoices-']")
将查找标识为{{1}的元素}或edit-invoices-
以id
答案 2 :(得分:0)
为什么不使用尾随连字符渲染div而不使用尾随连字符 或试图逃避他们