.find()和.closest()没有得到我的元素

时间:2013-03-23 12:35:18

标签: jquery

我想填充div动态起诉jQuery。现在问题如下:

使用.closest()不会将div#articleDetail填入divs个类 .date.views.count。因为我认为.closest()爬上向上 DOM,而不是向下

只有h4标记中的名称填入底部div#articledetail

HTML:

<div id="make" class="span12">
    <article class="make"> <a href=""><img src="../img/175x175.jpg" alt="" /></a>

        <div class="content">
             <h4><a class="merc" href="#latestClick">Mercedes-Benz</a></h4>

            <div class="date">12 March 2013</div>
            <div class="count"><span></span> photos</div>
            <div class="views">Views: <span>32</span>
            </div>
        </div>
    </article>
    <article class="make latest"> <a href=""><img src="../img/175x175.jpg" alt="" /></a>

        <div class="content">
             <h4><a class="bmw" href="#latestClick">BMW</a></h4>

            <div class="date">12 March 2013</div>
            <div class="count"><span></span> photos</div>
            <div class="views">Views: <span>89</span>
            </div>
        </div>
    </article>
</div>
<div id="articleDetail"></div>

JS:

$('#make article h4 a').click(function (e) {
    e.preventDefault();
    $('#latestInner, #make, #models').hide(200);
    $('#article').show(500);
    //fill articleDetail (name, date, views, count)
    $('#articleDetail').empty();
    $(this).closest('.date').clone().appendTo('#articleDetail'); //date
    $(this).closest('.count').clone().appendTo('#articleDetail'); //count
    $(this).closest('.views').clone().appendTo('#articleDetail'); //views
    $(this).parent().clone().appendTo('#articleDetail'); //name
.....

我有什么建议可以实现这个目标吗?

注意:想要添加ID,我不想更改HTML的结构。必须有一种方法可以调用适当的类并将其附加到#articledetail

.views .count and .date

3 个答案:

答案 0 :(得分:2)

你是对的.closest上了树而不是下来。您要查找的元素都是该链接的祖父母的子项。所以你会怎么做?您首先找到祖父母,然后搜索其子女:

var $content = $(this).closest('.content');
$content.find('.date').clone().appendTo('#articleDetail');
// ...

答案 1 :(得分:1)

closest找到与给定选择器匹配的最接近的上升符。但是,在您的标记中,<div class="date">不是a元素的祖先,因此找不到任何内容。应该起作用的是:

$(this).closest('.content').find('.date')

答案 2 :(得分:1)

爬上包装纸,找到里面的东西:

$(this).closest('.content').find('.date.')