这是正常的吗?
// Put testimonials in slides
var testimonialEls = $("#block-testimonials").children();
var testimonialCache = testimonialEls.clone();
//testimonialEls.remove();
var testimonials = [];
console.dir(testimonialCache.siblings("article").not(".featured,.featured-wide"));
console.dir(testimonialEls.siblings("article").not(".featured,.featured-wide"));
testimonialEls的作品testimonialCache返回0。
我不能在克隆项目上使用jquery选择器吗?
答案 0 :(得分:1)
该元素是与其所有孩子一起克隆的 - 但不与任何兄弟姐妹一起克隆(我想这是一种显而易见的东西)。引用文档:
.clone()
方法执行匹配集的深层副本 元素,意味着它复制匹配的元素以及所有元素 他们的后代元素和文本节点。
你真正需要做的是克隆' root'部分('#block-testimonials',在您的情况下),然后检查其直接子女 - 或后代,以更适合您的情况。
// Put testimonials in slides
var testimonialEls = $("#block-testimonials");
var testimonialCache = testimonialEls.clone();
console.dir(testimonialCache.find("article").not(".featured,.featured-wide"));
console.dir(testimonialEls.find("article").not(".featured,.featured-wide"));
Demo。或者,您可以仅存储叶元素,然后使用.filter()检查所需的元素:
var testimonialEls = $("#block-testimonials").children();
// ...
console.dir(testimonialEls.filter("article").not(".featured,.featured-wide"));
......那也会给你相同的结果。但是,如果您只需要将article
元素存储在您的缓存中,请明确设置这些限制:
var testimonialEls = $("#block-testimonials").children('article');
// ...
console.dir(testimonialCache.not(".featured,.featured-wide"));
现在检查article
显然是多余的 - 该缓存中没有其他元素,这就是为什么不再需要.filter()
调用的原因。