1

我正在选择与某种格式(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

谁能告诉我为什么尾随连字符会破坏代码?

4

3 回答 3

2

这是因为|=代表前缀选择器

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

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

例如: $("#invoicesTable div[id|='edit-invoices']"): 将查找具有 idedit-invoicesid以 开头的元素edit-invoices-,以同样的方式$("#invoicesTable div[id|='edit-invoices-']")查找具有 idedit-invoices-id以开头的元素edit-invoices--

于 2013-10-29T16:29:45.543 回答
2

尝试^=

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

正如 Andreas 指出的那样,|=实际上搜索该字符串加上一个连字符,所以当你添加尾随连字符时,jQuery 正在寻找编辑发票——我相信。

jQuery 参考

演示

于 2013-10-29T16:27:21.610 回答
0

Why not without trailing hyphen render the divs without trailing hyphen or try to escape them

于 2013-10-29T16:20:38.513 回答