【问题标题】:Javascript: help with replacing '<div>' with '<br>' of an innerHTML!Javascript:帮助用 innerHTML 的 '<br>' 替换 '<div>'!
【发布时间】:2011-05-16 08:04:15
【问题描述】:

我有一个用户在其中写入的可编辑 div。正如他所写,一个 javascript 函数将 div html 添加到 textarea。当用户按下 SHIFT+Enter 时,div 得到一个&lt;br&gt;。这很好。

但是当用户单独按 Enter 键时,div 会得到&lt;div&gt;&lt;/div&gt; 标签。

因此,我尝试使其在按下 Enter 时,javascript 扫描 div 的 html 以消除 &lt;/div&gt; 并将 &lt;div&gt; 更改为 &lt;br&gt;。结果将是无论用户按下SHIF+Enter 还是Enter,div 的html 最终将只使用&lt;br&gt; 进行换行。

<head>
    <script type="text/javascript">
        function doStuff(e){
            if (window.event.keyCode == 13) {
                var s=document.getElementById("divv").innerHTML;
                s.replace("<div>", "<br>");
                s.replace("</div>", "");
                document.getElementById("divv").innerHTML=s;
            }
            document.getElementById("txtt").value = document.getElementById("divv").innerHTML;
        }
    </script>
</head>
<body>
    <div contenteditable="true" id="divv" onKeyUp=doStuff(event);">
        write here! Then press enter!
    </div>
    <textarea id="txtt" rows="30" cols="100">  
    </textarea>
</body>

我的代码不起作用。按下 Enter 后,textArea 仍显示 div 标签。
我不确定我做错了什么。请帮忙。

【问题讨论】:

    标签: javascript html replace innerhtml


    【解决方案1】:

    replace() 方法不会修改它所调用的字符串,它返回一个替换出现的新字符串。

    你可以这样做:

    var divv = document.getElementById("divv");
    divv.innerHTML = divv.innerHTML.replace("<div>", "<br>").replace("</div>", "");
    

    【讨论】:

    • 愚蠢的我。就是这样。谢谢。
    【解决方案2】:

    通常浏览器会将innerHTML 存储标记为&lt;DIV&gt;&lt;/DIV&gt; - 您可以尝试使用:

    s = s.replace(/<div>/ig,"<br>");
    s = s.replace(/<\/div>/ig,"");
    

    【讨论】:

    • 是的,我意识到替换返回了修改后的字符串,而不是仅仅改变它。但是感谢/ig。我没有意识到它会在第一场比赛中停止。
    【解决方案3】:

    首先,如果你使用xhtml,你必须使用标签“
    ”。

    还要注意 str.replace:它只替换一次。

    js> var x = "hello";
    js> x.replace("l", "L");
    heLlo
    

    进行替换实现:

    js> function myreplace(str, pattern, change_to) {
    var s = str;
    var s2 = s;
    do {
       s2 = s;
       s = s.replace(pattern, change_to);
    } while (s2 != s);
    return s;
    }
    js> myreplace("helllllo", "l", "L");
    heLLLLLo
    

    【讨论】:

    • 呃,我忘了正则表达式替换(stackoverflow.com/questions/4287970/…)。最好使用它。
    • 是的,我正在使用正则表达式。使用 /ig 它不会在第一场比赛中停止。无论如何,Tahnks。
    猜你喜欢
    • 2011-11-10
    • 2011-08-01
    • 1970-01-01
    • 2013-03-15
    • 2018-07-09
    • 2020-04-16
    • 2011-11-16
    • 1970-01-01
    • 2010-11-21
    相关资源
    最近更新 更多