【问题标题】:Retrieving ids of chid divs using jquery?使用jquery检索chid div的ID?
【发布时间】:2010-04-08 13:00:48
【问题描述】:

请看下面的代码..

                <div id="click_me">Save</div> 


<div id="blocks_sortable">
    <div id="block_1">
        <h2>Block 1</h2>

        <div class="items_sortable connectedSortable">
            <div id="item_1"> 
                <span>Item 1</span></div>   
            <div id="item_2"> 
                <span>Item 2</span></div>
            <div id="item_3"> 
                <span>Item 3</span></div>
        </div>
    </div>  
    <div id="block_2">
        <h2>Block 2</h2>

        <div class="items_sortable connectedSortable">
            <div id="item_4"> 
                <span>Item 4</span></div>   
            <div id="item_5"> 
                <span>Item 5</span></div>
            <div id="item_6"> 
                <span>Item 6</span></div>
        </div>
    </div>
</div>

<script>
    $("#click_me").click(function() {
            var result = $("#blocks_sortable > div");

            for(var i=0; i<result.length; i++){
                var str = ""; 
                var str2 = "";
                var block = result[i]; //div object

                //retrieve block id and create the string with id
                str += "block="+$(block).attr("id")+"&items=";

                //trying to select all the items of the current Block
                var result2 = $(block+" > div");                        
                    for(var j=0; j<result2.length; j++){
                        var item = result2[j];

                        str2 += $(item).attr("id")+",";
                    } //end for items

                str = str+str2;
                // looking for a final string in the format of .. block=block_1&items=item_1,item_2,item_3 for loop 1
                alert(str);
            }
    });
</script>

它不工作。是否有任何更简单且有效的解决方案来获取这些 ID。请帮忙。

谢谢。

【问题讨论】:

  • 你检查 firebug 是否有任何 javascript 错误?
  • hmm.. 调用方法时出现此语法错误,无法识别表达式:[object HTMLDivElement]':[nsIDOMEventListener::handleEvent]" nsresult:"0x8057001e (NS_ERROR_XPC_JS_THREW_STRING)" 位置:""数据:没有] ...
  • 在下面查看我对这个问题的回答。

标签: php javascript jquery jquery-selectors


【解决方案1】:

jQuery map 函数是你的朋友

$.map( 
    $("#blocks_sortable > div"),
    function(elementOfArray){
        var block = $(elementOfArray);
        var children = $.map(
            $("div[id]", block),
            function( eoa ){
                return eoa.id;
            }).join(",");

        return elementOfArray.id + "=" + children;
    }
).join(",");

将返回"block_1=item_1,item_2,item_3,block_2=item_4,item_5,item_6",这让您更接近您要去的地方(我认为)。

编辑: Solutionsource 在这里。

【讨论】:

  • 太棒了..我喜欢你的解决方案。谢谢。
【解决方案2】:

我认为您在拨打str += "block="+$(block).attr("id")+"&amp;items="; 时遇到了错误

.attr 不起作用,因为 block 是 dom 元素而不是 jquery 对象。 var item 也有同样的问题。

有效的解决方案是here。演示是here

这个 javascript 修复了它:

   $("#click_me").click(function() {
            var result = $("#blocks_sortable > div");

            for(var i=0; i<result.length; i++){
                var str = "";
                var str2 = "";
                var block = result[i]; //div object

                //retrieve block id and create the string with id
                str += "block="+ block.id +"&items=";

                //trying to select all the items of the current Block
                var result2 = $("#" + block.id + "> div > div");
                    for(var j=0; j<result2.length; j++){
                        var item = result2[j];

                        str2 += item.id +",";
                    } //end for items

                str = str+str2;
                // looking for a final string in the format of .. block=block_1&items=item_1,item_2,item_3 for loop 1
                alert(str);
            }
    });

【讨论】:

  • 为工作解决方案添加链接,非常好。先生,我会公然抄袭你!
  • @Jon +1 .. 你很棒 .. 它有效 .. 但我接受了@ROMANARMY 解决方案,因为它让我更容易实现我想要做的事情。
  • @R0MANARMY,也感谢您添加您的解决方案,如果您能提供一个演示,那就太好了。我肯定学到了一些新东西! @user187580,很高兴您找到了解决方案!这就是我们来这里的目的,我也将为 R0MANARMY +1 他的解决方案,我同意它更好,而且非常酷:)
【解决方案3】:
    $("#click_me").click(function() {
        var result = $("#blocks_sortable > div"); 

        for(var i=0; i<result.length; i++){
            var str = ""; 
            var str2 = "";
            var block = result[i].id; //div object

            //retrieve block id and create the string with id
            //str += "block="+$(block).attr("id")+"&items=";
            str += "block="+ block + "&";
            //trying to select all the items of the current Block
            var inner_span = "#" + block + " > div";
            var result2 = $(inner_span).children();

                for(var j=0; j<result2.length; j++){
                    var item = result2[j];

                    str2 += $(item).attr("id")+",";
                } //end for items

            str = str+str2;
            // looking for a final string in the format of .. block=block_1&items=item_1,item_2,item_3 for loop 1
            alert(str); // output block=block_1&item_1,item_2,item_3 
                        //        block=block_2&item_4,item_5,item_6

        }

【讨论】:

    【解决方案4】:

    尝试不使用“>”

    var result = $("#blocks_sortable div");
    

    【讨论】:

    • 这也会选择
      div,给他一个没有 ID 的元素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    相关资源
    最近更新 更多