不能在克隆项目上使用jquery选择器

时间:2014-04-05 08:44:02

标签: jquery

这是正常的吗?

// 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选择器吗?

http://jsfiddle.net/MUREY/2/

1 个答案:

答案 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()调用的原因。