【问题标题】:In jquery parent of same sibling when compared returning false在相同兄弟的jquery父级中比较返回false
【发布时间】:2012-07-20 12:42:14
【问题描述】:

我有一棵乌里树。对于每组子节点,我都有一个复选框或一个单选控件。

我正在做的是,当我选中任何复选框或单选框时,我希望除兄弟节点之外的所有节点都处于未选中状态(如果是复选框)。所以我在这里写了我的jquery。

我的 jquery 正在处理一个我需要帮助的问题。

如下:

if($(this).parent().parent().parent() != $(elem).parent().parent().parent())

整个小提琴是here 在上述情况下,当我比较相同的父母时,有时我应该得到false。 请查看代码并帮助理解为什么它们总是返回 true。

【问题讨论】:

  • 您是否尝试过比较 DOM 元素? if($(this).parent().parent().parent()[0] != $(elem).parent().parent().parent()[0])
  • 是的,比较 jQuery 对象没有意义,因为每次调用 $() 都会返回一个新对象。
  • 另外,除了那个脆弱的.parent()链,你可以考虑使用.closest('li')之类的东西来找到第一个父节点<li>。
  • @jbabey 我没有看到你的评论,我只是发布了答案。对此感到抱歉。
  • @EnesUnal 你努力回答,而不是我 :)

标签: javascript jquery object tree


【解决方案1】:
$(function(){
    $("#tree").find("input").bind("change", function(){
        setStateForAllInputControls($("#tree"), this);
    });
});

function setStateForAllInputControls(o, elem) {
    //alert($(elem).attr("name"));

    if($(elem).attr("checked") == "checked") {
        $(o).find("input").each(function(){

            //problem is in this if condition
            if($(this).parent().parent().parent().get(0) != $(elem).parent().parent().parent().get(0)) {
                $(this).removeAttr("checked");
            }
        });
        $(elem).attr("checked", "checked");
    }
}

会成功的

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 2016-04-17
    • 1970-01-01
    • 2016-12-18
    • 1970-01-01
    • 2022-07-10
    • 1970-01-01
    • 2011-09-28
    相关资源
    最近更新 更多