Javascript removeClass()正在从DOM中完全删除元素
这是我之前问题的基础: 我现在在另一个Javascript removeClass()正在从DOM中完全删除元素,javascript,jquery,html,Javascript,Jquery,Html,这是我之前问题的基础: 我现在在另一个中有一个。行为是一个可扩展的菜单。我通过添加和删除类来实现这一点。出于某种原因…在子列表上-它完全从DOM中删除元素,而不仅仅是切换它的类。为什么它会这样做 您可以看到以下示例: $(函数(){ //主膨胀元件 $(“.expander”)。单击(函数(){ var subShown=$(“ul>li”,this).hasClass(“show”); 如果(!subShown){ $(“.indented”,this).slideDown('100').a
中有一个
。行为是一个可扩展的菜单。我通过添加和删除类来实现这一点。出于某种原因…在子列表上-它完全从DOM中删除
元素,而不仅仅是切换它的类。为什么它会这样做
您可以看到以下示例:
$(函数(){
//主膨胀元件
$(“.expander”)。单击(函数(){
var subShown=$(“ul>li”,this).hasClass(“show”);
如果(!subShown){
$(“.indented”,this).slideDown('100').addClass(“show”);
$(“.caret”,this.addClass(“reversedCaret”);
}否则{
$(“.indented”,this).slideUp('100').removeClass(“show”);
$(“.caret”,this).removeClass(“reversedCaret”);
}
});
//子膨胀元件
$(“.sub扩展器,.caret”)。单击(函数(){
var subSelectText=$(“.sub expander”).text();
如果(子选择文本!=“更多”){
$(“.indented--sub”,this).slideUp('100').removeClass(“show”);
$(“.caret”,this).removeClass(“reversedCaret”);
$(“.more或less”).text(“more”);
}否则{
$(“.indented--sub”,this).slideDown('100').addClass(“show”);
$(“.caret”,this).removeClass(“reversedCaret”);
$(“.more或less”).text(“Show less”);
}
});
//停止.expander类中链接元素上的传播
$(“.indented”)。单击(函数(事件){
event.stopPropagation();
});
});代码>
.expander:悬停{
光标:指针;
}
.子扩展器-缩进{
填充:0 23px;
}
.亚插入符号{
右边距:75px;
}
.缩进,
.缩进--sub{
显示:无;
}
.表演{
显示:块;
}
+
第1项
-
+
- 更多
您可能希望使用更严格的选择器
在您的示例中,使用.sub expander
选择要替换其文本的节点。但是,这与ul.子扩展器相匹配
由于您希望它替换li.sub扩展器的文本,因此最简单的方法是使用更具体的选择器:
$(“li.sub扩展器”).text(“显示较少”)
或(更好)指定包含要替换另一个类名、id或其他标识符的文本的节点,以防止指向不同的元素。您可能需要使用更严格的选择器
在您的示例中,使用.sub expander
选择要替换其文本的节点。但是,这与ul.子扩展器相匹配
由于您希望它替换li.sub扩展器的文本,因此最简单的方法是使用更具体的选择器:
$(“li.sub扩展器”).text(“显示较少”)
或(更好)给出包含要替换另一个类名、id或其他标识符的文本的节点,以防止指向不同的元素。如果HTML无效,则UL不应是其他UL的直接子级。UL的唯一有效子女是LI。另外,您的removeClass调用并没有删除您的内容,而是您的$(“.sub expander”).text()
调用为什么没有?这表明情况并非如此:如果您正在使用text()
方法删除项目,则需要等待。它将用您提供的文本替换所有子元素和内容。对于我在这里尝试的操作,什么是可行的替代方法?到目前为止,我已经尝试了.html()
,.replace()
和.replaceWith()
您的html无效,UL不应该是其他UL的直接子女。UL的唯一有效子女是LI。另外,您的removeClass调用并没有删除您的内容,而是您的$(“.sub expander”).text()
调用为什么没有?这表明情况并非如此:如果您正在使用text()
方法删除项目,则需要等待。它将用您提供的文本替换所有子元素和内容。对于我在这里尝试的操作,什么是可行的替代方法?到目前为止,我已经尝试了.html()
,.replace()
和.replaceWith()
我不认为这是一个选择器问题,因为我已经尝试给它一个唯一的类,在这样做的过程中,该子部分根本没有展开。因为您的“if”stil检查.sub expander
文本值。我认为这不是选择器问题,因为我已经尝试给它一个唯一的类,在这样做时,该子部分根本没有展开。因为“if”stil检查.sub expander
文本值。