我正在做一些字符串操作来构建一个jquery选择器。诀窍,但对我来说似乎有点难看。有没有更好的方式做我正在做的事情?
$(".hierarchical[data-dependson='"+id+"']")
编辑:为什么它看起来很难看?如果可以的话,我想避免字符串操作。我使用.eq
和.has
看到了更好看的代码 - 但我看不到在这里使用它们的方法。
答案 0 :(得分:1)
按class
以外的属性进行搜索速度很慢,如果您想加快速度,可以让id
成为一个类并选择它:
$(".hierarchical."+id)
这是一个jsperf,用于显示两种选择器的速度差异:http://jsperf.com/select-by-attribute-vs-class(扰流警报:按类选择的速度要快几倍)。
答案 1 :(得分:1)
这个怎么样:
$.fn.attrIs = function(attr, value) {
return $(this).filter(function(index){
return $(this).attr(attr) == value;
});
}
然后:
$(".hierarchical").attrIs("data-dependson", id);
给定一个jQuery对象集合,这个attrIs(attr,value)函数会将集合减少到只有那些具有attr == value
的元素以下是一个示例:http://jsfiddle.net/RC652/
您可以修改此方法以更好地适合您自己的目的。
答案 2 :(得分:0)
你真正缺少的是一个很好的javascript格式化方法,所以你试图做的并不是被你的所有引号淹没。
我喜欢引用here的格式方法。这里它被复制为实用函数,因此您不必修补内置字符串对象。
var format = function(target) {
var args = arguments;
return target.replace(/{(\d+)}/g, function(match, number) {
number = parseInt(number) + 1;
return typeof args[number] != 'undefined'
? args[number]
: match
;
});
};
然后你可以这样做:
var selector = format(".hierarchical[data-dependson='{0}']", id);
// or with the monkey patch
selector = ".hierarchical[data-dependson='{0}']".format(id);
$(selector)
仍然有点混乱,但从根本上说,你将一个值拼接成一个字符串。我也绝不担保任何此类的表现。其他答案可能会说明这很慢,但这不是你的问题。
答案 3 :(得分:0)
你可以过滤它:
$(".hierarchical").filter(function(){
return $(this).data("dependson") === id;
});