jQuery选择ID失败,尾随连字符

时间:2013-10-29 16:14:25

标签: jquery

我正在选择匹配特定格式(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

任何人都可以告诉我为什么尾随连字符会破坏代码吗?

3 个答案:

答案 0 :(得分:2)

尝试^=

var fields = $("#invoicesTable div[id^='edit-invoices-']").map(function() { return this.id; }).get();

正如安德烈亚斯指出的那样,|=实际上会搜索该字符串并使用连字符,所以当你添加尾随连字符时,jQuery正在寻找编辑发票 - 我相信。

jQuery Reference

Demo

答案 1 :(得分:2)

这是因为|=代表prefix selector

  

选择具有指定属性且具有值的元素   等于给定的字符串或以该字符串开头,后跟a   连字符( - )

因此,如果您使用此选择器,它会在给定值的末尾添加-

例: $("#invoicesTable div[id|='edit-invoices']"):将从edit-invoices开始查找标识为idedit-invoices-的元素,$("#invoicesTable div[id|='edit-invoices-']")将查找标识为{{1}的元素}或edit-invoices-id

开头

答案 2 :(得分:0)

为什么不使用尾随连字符渲染div而不使用尾随连字符 或试图逃避他们