Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery切换程序行为不符合预期_Jquery_Toggle - Fatal编程技术网

jQuery切换程序行为不符合预期

jQuery切换程序行为不符合预期,jquery,toggle,Jquery,Toggle,我有一个jQuery开关,我正在与之战斗。我可以让它一次切换多个div的可见性,但只要我实现next()函数,唯一可以切换的就是脚本的加减部分,而不是div的可见性。这段代码中有什么突出的地方吗 这可以工作,但可以切换所有div,而不仅仅是关闭一个div: jQuery(function(){ jQuery(".toggleText").click(function(){ jQuery(".hiddenText").slideToggle("fast"); jQuery(t

我有一个jQuery开关,我正在与之战斗。我可以让它一次切换多个div的可见性,但只要我实现next()函数,唯一可以切换的就是脚本的加减部分,而不是div的可见性。这段代码中有什么突出的地方吗

这可以工作,但可以切换所有div,而不仅仅是关闭一个div:

jQuery(function(){
 jQuery(".toggleText").click(function(){
  jQuery(".hiddenText").slideToggle("fast");
        jQuery(this).html(function(i,html) {
            if (html.indexOf('More') != -1 ){
               html = html.replace('More','Less');
            } else {
               html = html.replace('Less','More');
            }
            return html;
        }).find('img').attr('src',function(i,src){
        return (src.indexOf('plus.gif') != -1)? 'minus.gif' :'plus.gif';
    });
});
});
这只会切换more+/less,而不会切换.hiddenText div。(这两种方法的唯一区别是在第三行中添加了next()

有什么想法吗

PS:我使用jQuery而不是$,因为这段代码和CMS存在冲突。从你的写作方式来看

jQuery(this).next(".hiddenText")
我猜您想在
jQuery(this)
之后找到下一个
.hiddentText
?这不是
.next()
的工作方式。我不会找到下一个同级,但会通过可选选择器对其进行筛选

你可能需要

jQuery(this).parent().children(".hiddenText")
如果在
jQuery(this)
的父级中只有一个
.hiddentText

不要使用
html()
/
innerHTML
。它不是做你想做的事

执行此操作时,您要求浏览器将其当前文档模型序列化为HTML字符串。然后修改HTML并将其写回,此时浏览器必须销毁所有现有元素内容,并用从HTML字符串解析的新DOM节点替换它

除了速度慢且不可靠之外(因为您真的不知道浏览器将选择何种确切格式来序列化内容;它与您提供给它的原始HTML不同),这还必然会破坏DOM中无法转换为HTML标记字符串的所有信息。其中包括表单字段值、JavaScript引用和事件处理程序

因此,当您写回HTML时,您将丢失该标记中元素上的所有
click
事件,包括打开/关闭箭头上的事件

忘记HTML字符串黑客。直接处理DOM元素,直接使用
更多
/
更少
文本内容更改每个元素的
文本()

jQuery(this).parent().children(".hiddenText")
jQuery(this).html(function(i,html) {