聚合多个 jquery 选择器与共同 parent
Aggregate multiple jquery selectors with common parent
我有几个 selector 有一个共同的 parent。
有什么好的方法可以将它们放在一个函数调用下吗?
例如:
$('td.postbody').children('a[href$=".gif"], a[href$=".jpg"], a[href$=".png"], a[href$=".bmp"]').addClass("zoom2 itag").attr('title','Click to Expand Image.');
$('td.postbody').children('a[href$=".GIF"], a[href$=".JPG"], a[href$=".PNG"], a[href$=".BMP"]').addClass("zoom2 itag").attr('title','Click to Expand Image.');
$('td.postbody').children('a:not([class])').addClass("smlLink");
$('td.postbody').children('img:not([src^="modules/"])').attr("height", "200").addClass("image-link");
我想将它们放在一个通用函数下,例如:
$('td.postbody').children('a','img')).each(function(){...});
我查看了变量的一些用途,但我发现,它看起来并不适用于此。
我的逻辑是一次 select 所有 $('td.postbody').children('*') 然后处理该组,而不是多次扫描文档。
jQuery 这样的逻辑好吗?我的方法应该有所不同吗?
谢谢,
克里斯
你可以在循环中使用is
方法
$('td.postbody').children('a, img').each(function() {
var el = $(this);
if (el.is('a[href$=".gif"], a[href$=".jpg"], a[href$=".png"], a[href$=".bmp"]')) {
// do something
} else if (el.is('a:not([class])')) {
// do something
} else if (el.is('img:not([src^="modules/"])')) {
// do something
}
});
... 因为选择器 [href$=]
区分大小写,您可以通过其他方式检查扩展名:
if (!!this.href && /(?:jpg|gif|png|bmp)$/i.test(this.href)) {
}
我认为单个语句是不够的,但你可以使用一些改进,比如缓存常用的 td.postbody 选择器,并将第一条和第二条语句组合在一起
var $tds = $('td.postbody');
$tds.children('a[href$=".gif"], a[href$=".jpg"], a[href$=".png"], a[href$=".bmp"],a[href$=".GIF"], a[href$=".JPG"], a[href$=".PNG"], a[href$=".BMP"]').addClass("zoom2 itag").attr('title','Click to Expand Image.');
$tds.children('a:not([class])').addClass("smlLink");
$tds.children('img:not([src^="modules/"])').attr("height", "200").addClass("image-link");
我有几个 selector 有一个共同的 parent。 有什么好的方法可以将它们放在一个函数调用下吗? 例如:
$('td.postbody').children('a[href$=".gif"], a[href$=".jpg"], a[href$=".png"], a[href$=".bmp"]').addClass("zoom2 itag").attr('title','Click to Expand Image.');
$('td.postbody').children('a[href$=".GIF"], a[href$=".JPG"], a[href$=".PNG"], a[href$=".BMP"]').addClass("zoom2 itag").attr('title','Click to Expand Image.');
$('td.postbody').children('a:not([class])').addClass("smlLink");
$('td.postbody').children('img:not([src^="modules/"])').attr("height", "200").addClass("image-link");
我想将它们放在一个通用函数下,例如:
$('td.postbody').children('a','img')).each(function(){...});
我查看了变量的一些用途,但我发现,它看起来并不适用于此。
我的逻辑是一次 select 所有 $('td.postbody').children('*') 然后处理该组,而不是多次扫描文档。
jQuery 这样的逻辑好吗?我的方法应该有所不同吗?
谢谢,
克里斯
你可以在循环中使用is
方法
$('td.postbody').children('a, img').each(function() {
var el = $(this);
if (el.is('a[href$=".gif"], a[href$=".jpg"], a[href$=".png"], a[href$=".bmp"]')) {
// do something
} else if (el.is('a:not([class])')) {
// do something
} else if (el.is('img:not([src^="modules/"])')) {
// do something
}
});
... 因为选择器 [href$=]
区分大小写,您可以通过其他方式检查扩展名:
if (!!this.href && /(?:jpg|gif|png|bmp)$/i.test(this.href)) {
}
我认为单个语句是不够的,但你可以使用一些改进,比如缓存常用的 td.postbody 选择器,并将第一条和第二条语句组合在一起
var $tds = $('td.postbody');
$tds.children('a[href$=".gif"], a[href$=".jpg"], a[href$=".png"], a[href$=".bmp"],a[href$=".GIF"], a[href$=".JPG"], a[href$=".PNG"], a[href$=".BMP"]').addClass("zoom2 itag").attr('title','Click to Expand Image.');
$tds.children('a:not([class])').addClass("smlLink");
$tds.children('img:not([src^="modules/"])').attr("height", "200").addClass("image-link");