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
Javascript 尝试替换字符串中的最后一个字符,而不是重复的字符串_Javascript_Jquery - Fatal编程技术网

Javascript 尝试替换字符串中的最后一个字符,而不是重复的字符串

Javascript 尝试替换字符串中的最后一个字符,而不是重复的字符串,javascript,jquery,Javascript,Jquery,这是一个JSBin: 当您打开DIV(自定义或个性化)时,函数将按其应该的方式运行,截断“+”并替换为“-”符号,但是当用户关闭DIV时,字符串将被复制并放入 我希望结尾与开头的动作相同(截断并替换最后一个字符) 代码如下: HTML: 这似乎具有您描述的效果: function toggle_expand(id){ var e = document.getElementById(id); var text = $(e).siblings("span").text();

这是一个JSBin:

当您打开DIV(自定义或个性化)时,函数将按其应该的方式运行,截断“+”并替换为“-”符号,但是当用户关闭DIV时,字符串将被复制并放入

我希望结尾与开头的动作相同(截断并替换最后一个字符)

代码如下:

HTML:


这似乎具有您描述的效果:

function toggle_expand(id){
    var e = document.getElementById(id);
    var text = $(e).siblings("span").text();
    if( $(e).css('display') === 'none' ){
        $(e).slideToggle('fast', function(){
            var newText = $(e).siblings().text( text.slice(0, -1)+"-" );
        });
    } else {
        $(e).slideToggle('fast', function(){
            text = $(e).siblings("span").text( text.slice(0, -1)+"+" );
        });
    }
}

您的
同级
选择器缺乏特定性。有趣的是,

错误地添加了相同的文本,但当显示下拉div时,它最初会被遮挡

function toggle_expand(id) {
    var e = document.getElementById(id);
    var $title = $(e).siblings(".smallTitle");
    var text = $title.text();

请参阅函数其余部分中的
$title
而不是
$(e).兄弟姐妹(“span”)

关于little
regex
love:

function toggle_expand(id){
    var e = document.getElementById(id);
    var text = $(e).siblings("span").text();
    if( $(e).css('display') === 'none' ){
        $(e).slideToggle('fast', function(){
            var newText = $(e).siblings().text( text.replace(/\+/,'-'));
        });
    } else {
        $(e).slideToggle('fast', function(){
            text = $(e).siblings("span").text( text.replace(/-/,'+'));
        });
    }
}

发生这种情况的原因是,有一个空文本节点也是同级节点,因此您最终将字符串设置为2个元素,然后设置为4个,…这非常有效!非常感谢。因此,我可以更好地理解发生了什么,哪个元素包含空文本节点?#customizePort有两个兄弟节点,一个span和一个br(正如下面所指出的@Explosion Pills,而不是文本节点)是有意义的!非常感谢!我在发布这篇文章的时候正在阅读正则表达式,有点搞砸了。我不完全理解其中的语法!如果你能解释为什么需要所有的前/后斜杠,我可能会使用它,因为它读起来更好。第一个和最后一个/是定义
regex
的**是转义
+
(前面的
-
是多余的,我已经删除了它)。您可以在此处阅读有关JS正则表达式的更多信息:
function toggle_expand(id) {
    var e = document.getElementById(id);
    var $title = $(e).siblings(".smallTitle");
    var text = $title.text();
function toggle_expand(id){
    var e = document.getElementById(id);
    var text = $(e).siblings("span").text();
    if( $(e).css('display') === 'none' ){
        $(e).slideToggle('fast', function(){
            var newText = $(e).siblings().text( text.replace(/\+/,'-'));
        });
    } else {
        $(e).slideToggle('fast', function(){
            text = $(e).siblings("span").text( text.replace(/-/,'+'));
        });
    }
}