我将JQuery用于我的Web应用程序。我不知道如何为这种情况编写选择器。
<a class="abc def xyz-delete-confirm efg">text</a>
<a class="abc def delete-confirm">text</a>
我需要查找所有类别以“-delete-confirm”结尾的链接,或者有一个名为“delete-confirm”的类。
我知道如何处理有一个名为“delete-confirm”的类的情况。 “删除 - 确认情况”怎么样?我可以让一个选择器覆盖两种情况吗?
感谢您的任何意见!
问候。
答案 0 :(得分:8)
你可以像这样组合它们。
var $allofthem = $('[class$="-delete-confirm"],.delete-confirm');
请注意,因为如果类名出现在元素类列表的末尾并以-delete-confirm
结尾,这只是一个以selector为结尾的属性值,只会被视为 < / p>
使用结束选择器和类选择器的组合。
对于纯粹的选择,您可以这样做(无论它出现在classList中的位置或它有多少个类):
var regExp = /-delete-confirm(\s|$)/; //I am sure regex can be improved
var $allofthem = $('a').filter(function(){
return regExp.test(this.className) || $(this).is('.delete-confirm');
});
<强> Demo 强>
答案 1 :(得分:3)
这种情况的问题在于将类视为另一个属性,并且使用属性选择器很少能以一致的方式获得您正在寻找的内容。
需要注意的一些事项:
no-delete-confirm-available
)?请记住,当您动态添加和删除类时,无法保证在获得class
属性的值时,类会显示哪个顺序。
如果您有一组非常严格的情况,将使用它,特别是如果该元素只有1个类,则属性选择器可能有效。否则,我建议你使用不同的方法。
处理这个问题的正确方法是使用不同的类 - 可能有任何进程添加*-delete-confirm
类也添加另一个类 - 也许has-delete-confirm
或其他类。然后你可以选择那个,而不必担心类属性。
另一个不理想的选项,但是比属性选择器效果更好的选择是选择所有可能的元素,然后filter()
使用正则表达式查找匹配类的回调函数<a>
。
例如,如果元素都是#links
的{{1}}个子元素,则可以使用:
$('#links a').filter(function () {
return /(^|\s|-)delete-confirm(\s|$)/.test($(this).attr('class'));
});
你也可能会发现这个类似的问题是有意义的:
jQuery:How to select elements with particular class here?