如何用jquery找到div中最深的孩子

时间:2013-03-05 16:08:46

标签: javascript jquery

我正在尝试使用jquery在指定的div中找到最深的元素。但是使用的代码产生了error TypeError: parent.children is not a function

我从此link

中找到了此代码

代码是:

function findDeepestChild(parent) {

    var result = {depth: 0, element: parent};

    parent.children().each(         //Here I getting the error TypeError: parent.children is not a function
        function(idx) {
            var child = $(this);
            var childResult = findDeepestChild(child);
            if (childResult.depth + 1 > result.depth) {
                result = {
                    depth: 1 + childResult.depth, 
                    element: childResult.element};
            }
        }
    );

    return result;
}
---------------------------------------------------------------------------------------
        $(document).on('keypress','#sendComment', function(e) {
    if(e.keyCode==13){
        var itemId=$('#findbefore').prev('.snew').attr('id');//
        var item=findDeepestChild(itemId);
        alert(item);
    }
});

我的divs是:

<div id="S04" class="snew" style="display: block;">
    <div class="author-image"></div>
    <span>xyz shared the image xyz</span>
    <div class="s-content">
        <div class="s-message"></div>
        <div class="shpicture">
            <img class="SharedImage" width="100%" height="100%" data-shareid="1" data-alid="1" data-id="1" alt="xyz" src="data:image/jpeg;base64,">
        </div>
    </div>
</div>
<div class="SPcommentbox">
    <div class="comment">
        <div class="commenter-image"></div>
        <div class="addcomment">
            <input class="commentbox" type="text" placeholder="Write a comment...">
        </div>
    </div>
</div>

我需要从这些中找到img

请有人帮助我......谢谢...

3 个答案:

答案 0 :(得分:0)

你用字符串调用它,但它期待一个jQuery实例。

而不是

var itemId=$('#findbefore').prev('.snew').attr('id');//
var item=findDeepestChild(itemId);
你可能想要

var item=findDeepestChild($('#findbefore').prev('.snew'));

答案 1 :(得分:0)

您正在传递itemId,这是给定元素的ID属性。我认为你要传递的是元素本身。只需删除attr来电,即可:

var item = findDeepestChild($("#findbefore").prev(".snew"));

答案 2 :(得分:0)

要获得最深的嵌套元素,请使用

$("#" + parent).find("*").last().siblings().addBack()

http://jsfiddle.net/6ymUY/1/

然后您可以使用

获取id数据属性
item.data("id")

http://jsfiddle.net/6ymUY/2/

完整代码:

function findDeepestChild(parent) {
    return $("#" + parent).find("*").last().siblings().addBack();
}
var item=findDeepestChild("S04");
console.log(item)

console.log(item.data("id"));