【问题标题】:How to iterate through only the first div JavaScript如何仅遍历第一个 div JavaScript
【发布时间】:2019-07-01 15:22:31
【问题描述】:

我有以下 HTML,

<div class="col-lg-7 col-md-6 col-sm-6 text-left">
    <a href="javascript:;" class="multiSelect active" id="lbAssistingStaff" title="Evelyn Lupardus, Jamison Hennigan, Kajal Jain, Milud De Silvaa"><span style="width: 252px;">Evelyn Lupardus, Jamison Hennigan, Kajal Jain, Milud De Silvaa</span></a>
    <div class="multiSelectOptions" style="position: absolute; z-index: 99999; visibility: visible; height: 150px; width: 259px; top: 30px; left: 15px;">
        <label class="selectAll">
            <input type="checkbox" class="selectAll">Select All</label>
        <label class="">
            <input type="checkbox" name="lbAssistingStaff[]" value="10307">Dovie Segerson</label>
        <label class="checked">
            <input type="checkbox" name="lbAssistingStaff[]" value="14172">Kajal Jain</label>
        <label>
            <input type="checkbox" name="lbAssistingStaff[]" value="10354">Lydia Nikocevic</label>
        <label class="checked">
            <input type="checkbox" name="lbAssistingStaff[]" value="10355">Margo Mondloch</label>
    </div>
    <div class="multiSelectOptions" style="position: absolute; z-index: 99999; visibility: visible; height: 150px; width: 259px;">
        <label class="selectAll">
            <input type="checkbox" class="selectAll">Select All</label>
        <label>
            <input type="checkbox" name="lbAssistingStaff[]" value="10307">Dovie Segerson</label>
        <label class="checked">
            <input type="checkbox" name="lbAssistingStaff[]" value="14172">Kajal Jain</label>
    </div>
    <div class="multiSelectOptions" style="position: absolute; z-index: 99999; visibility: visible; width: 259px;">
        <label class="selectAll">
            <input type="checkbox" class="selectAll">Select All</label>
        <label class="checked">
            <input type="checkbox" name="lbAssistingStaff[]" value="14172">Kajal Jain</label>
        <label>
            <input type="checkbox" name="lbAssistingStaff[]" value="10062">Nevada Morison</label>
    </div>
    <div class="multiSelectOptions" style="position: absolute; z-index: 99999; visibility: visible; height: 150px; width: 412px;">
        <label class="selectAll">
            <input type="checkbox" class="selectAll">Select All</label>
        <label>
            <input type="checkbox" name="lbAssistingStaff[]" value="10259">Abel Schear</label>
        <label class="checked">
            <input type="checkbox" name="lbAssistingStaff[]" value="10405">Adam Sandling</label>
        <label>
            <input type="checkbox" name="lbAssistingStaff[]" value="10400">Alta Barba</label>
        <label class="checked">
            <input type="checkbox" name="lbAssistingStaff[]" value="16224">amali silva</label>
    </div>
    <input type="hidden" name="ctl00$ContentPlaceHolder1$ctlViewFilters$hndAssistingStaff" id="hndAssistingStaff" value="10276,10352,14172,14177,10276,10352,14172,10276,10352,14172,14172,14172,14172,14172,10276,10352,14172,10276,10352,14172">
</div>

通过 JQuery 多选生成。有单独的 div 具有相同的类名,称为class="multiSelectOptions"。现在我需要将所有选中的选项值推送到仅在第一个 Div(top Div) 内的 Array 中。这意味着,

<div class="multiSelectOptions" style="position: absolute; z-index: 99999; visibility: visible; height: 150px; width: 259px; top: 30px; left: 15px;">
    <label class="selectAll">
        <input type="checkbox" class="selectAll">Select All</label>
    <label class="">
        <input type="checkbox" name="lbAssistingStaff[]" value="10307">Dovie Segerson</label>
    <label class="checked">
        <input type="checkbox" name="lbAssistingStaff[]" value="14172">Kajal Jain</label>
    <label>
        <input type="checkbox" name="lbAssistingStaff[]" value="10354">Lydia Nikocevic</label>
    <label class="checked">
        <input type="checkbox" name="lbAssistingStaff[]" value="10355">Margo Mondloch</label>
</div>

我试过了,

$("#lbAssistingStaff").next("div").click(function (e) {
    var listboxID = "lbAssistingStaff";
    var selectedItemIDs = [];
    $('input[name="' + listboxID + '\[\]"]:checked').each(function () {
        selectedItemIDs.push($(this).val());
    });
});

但是这会遍历所有 div 的 name="lbAssistingStaff[]",根据我的要求,数组应该只有这两个值 (14172,10355)。

【问题讨论】:

    标签: javascript jquery html loops


    【解决方案1】:

    提供上下文。

    $('input[name="' + listboxID + '\[\]"]:checked', this)
    

    这会将选择器应用于this,这是您单击的 div。

    【讨论】:

    • 这样最简单的方法,谢谢。我还有另一个问题,上面有问题的 HTML,它是通过 Jquery 多选生成的,我不知道为什么 Jquery 多选每次都填充而不替换第一个,顶部 div 是最后生成的 div,我不需要其他divs,我怎样才能删除其他人?我认为每次创建单独的 div 都会减慢应用程序
    • 这听起来像是一个次要问题,您应该将其作为独立问题发布。
    【解决方案2】:

    $(this) 中使用find

    $("#lbAssistingStaff").next("div").click(function (e) {
        var listboxID = "lbAssistingStaff";
        var selectedItemIDs = [];
        $(this).find('input[name="' + listboxID + '\[\]"]:checked').each(function () {
        // ^^^^^^^^^
            selectedItemIDs.push($(this).val());
        });
    });
    

    旁注:jQuery 提供了一个map 函数,您可以使用它来代替创建数组然后推送给它:

    var selectedItemIDs = $(this).find('input[name="' + listboxID + '\[\]"]:checked').map(function () {
        return this.value; // No need to wrap it just to get the value
    }).get();
    

    不要忘记最后的.get(),否则你会得到一个jQuery对象而不是一个真正的数组。

    【讨论】:

    • 谢谢你@T.J.克劳德和我还有另一个问题,上面有问题的 HTML,它是通过 Jquery 多选生成的,我不知道为什么 Jquery 多选每次都填充而不替换第一个,顶部 div 是最后生成的 div,我不需要其他 div,我怎样才能删除其他的?我认为每次创建单独的 div 都会减慢应用程序
    • @Sachith - 像$("#lbAssistingStaff").siblings(".multiSelectOptions").slice(1).remove(); 这样的东西应该这样做。这将找到id="lbAssistingStaff" 元素,找到其所有具有multiSelectOptions 类的兄弟元素,仅通过slice 选择不是第一个的元素,然后删除它们。
    猜你喜欢
    • 2012-06-06
    • 2013-09-17
    • 2021-09-05
    • 2021-06-03
    • 2021-10-06
    • 1970-01-01
    • 2019-12-15
    • 2014-07-03
    • 2017-01-12
    相关资源
    最近更新 更多