將某字串取代?

<div contenteditable="true">
<br />
<p>gwgawegwewgaweg</p><p>awe</p><p>gawe</p><p>we</p><p>awe</p><p>eg</p><br />
  </div>

假設某一段文字是這樣
當我的表單提交後(透過PHP送到mysql)
能夠把該div區塊內
第一個最後一個 <br /> 去掉呢
不一定要在submit後才去掉
如果能在key的過程中去掉也可以!

阅读 2.9k
3 个回答

咋一看,是个低级问题,原以为trim函数即可轻易去掉。结果发现不行。后来又想用str_replace,发现也不合适。

看来这个问题还是个好问题呢。

你需要一个trimArray()函数

function trimArray($str, $charArray)
{
    foreach ($charArray as $char) {
        $charLength = strlen($char);
        if (substr($str, 0, $charLength) === $char) {
            // 去掉头部
            $str = substr_replace($str, '', 0, $charLength);
        }
        if (substr($str, 0 - $charLength) === $char) {
            // 去掉尾部
            $str = substr_replace($str, '', strlen($str) - $charLength, $charLength);
        }
    }
    return $str;
}

$str = '<br />
<p>gwgawegwewgaweg</p><p>awe</p><p>gawe</p><p>we</p><p>awe</p><p>eg</p><br />';

var_dump(trimArray($str,['<br />']));
// string(79) "
<p>gwgawegwewgaweg</p><p>awe</p><p>gawe</p><p>we<br /></p><p>awe</p><p>eg</p>"

蛤,我理解的富文本编辑过程中去掉头和尾的换行

举个例子

document.querySelector('div[contenteditable]').innerHTML.trim().replace(/^(\<br \/>)|(\<br \/>)$/g, '')

建议可以再做个xss转义

如果未理解錯你的意思是字符串而不是元素的話

//其中$1,$2,$3,$4......分別爲分組匹配中分組中的內容
let str = "<div contenteditable='true'><br /><p>gwgawegwewgaweg</p><p>awe</p><p>gawe</p><p>we</p><p>awe</p><p>eg</p><br /></div>"
let reg = /^(.*?)(<br \/>)(.*)(<br \/>)(.*)$/g
let newStr = str.replace(reg,'$1$3$5')
console.log(newStr)

如果只取<div>中字符串的話

其中字符串的內容可由innerHTML獲取
let str = "<br /><p>gwgawegwewgaweg</p><p>awe</p><p>gawe</p><p>we</p><p>awe</p><p>eg</p><br />"
let reg = /^(<br \/>)(.*)(<br \/>)$/g
let newStr = str.replace(reg,'$2')
console.log(newStr)

或者我其實是理解錯了,而你想刪除元素的話

//通過一些辦法獲取div
var elFa = document.getElementsByTagName('div')[0];
var els = elFa.getElementsByTagName('br');
elFa.removeChild(els[0]);
elFa.removeChild(els[els.length-1]);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题