Javascript Jquery-从HTML中删除字符,但保留HTML标记不变

Javascript Jquery-从HTML中删除字符,但保留HTML标记不变,javascript,jquery,html,text,Javascript,Jquery,Html,Text,我正在尝试构建一个简单的CMS,用户可以在contenteditable div中写入任何内容。当他们保存工作时,我希望从他们输入的文本中删除特定字符,即: 案文如下: <ul> <li>This is the text inserted by <b>user</b> and styled by him - there should be no comma at the end of a <b><i><u>L

我正在尝试构建一个简单的CMS,用户可以在contenteditable div中写入任何内容。当他们保存工作时,我希望从他们输入的文本中删除特定字符,即:

案文如下:

<ul>
  <li>This is the text inserted by <b>user</b> and styled by him - there should be no comma at the end of a <b><i><u>LI element,</u></i></b></li>
</ul>
  • 这是由用户插入的文本,并由用户设置样式-li元素的末尾不应有逗号
我知道如何用jquery.text()删除逗号,但它只给了我一个没有HTML标记的纯文本。问题是,我不知道在一个句子的末尾是否有或有多少HTML标记应该删除逗号

有没有其他方法可以在不接触HTML标记的情况下删除此逗号?所以在保存工作后,文本将保持其应有的样式,但在LI元素的末尾没有逗号


简单小提琴:

下面是一个工作示例的小提琴:

$(函数(){
$('#remCom')。在('click',function()上{
$('#CorrectHTML').html('');
$('li')。每个(函数(){
var thistText=$(this.html().trim();
var result=/[^,]*$/.exec(thisText)[0];
结果=结果。替换(/(]+)>)/ig,“”;
如果(!结果){
thistText=thistText.replace(/,([^,]*)$/,“$1”);
}
$('#CorrectHTML')。追加('
  • '+thistText+'
  • '); }); }); });
    基本上,使用正则表达式删除您不需要的任何字符,并将其替换为零

    编辑

    这说明逗号在格式化标记之前和之后也是分散的,并且只删除末尾的逗号。

    试试这个

    $(函数(){
    var$ul=$(“ul”),text=$ul.text().split(“”),last=$.trim(text[text.length-1]);
    if(last&&last.lastIndexOf(“,”==last.length-1){
    $ul.replacetwith(
    $ul[0]。outerHTML.replace(last,last.substring(0,last.length-1))
    );
    }                      
    });
    
    
    
    • 这是由用户插入的文本,并由用户设置样式-li元素的末尾不应有逗号

    解决问题的一般方法

    • 获取.text(),检查最后一个字符是否为逗号
    • 如果是,请使用lastindexof从
      .html()
      中删除最后一个逗号
    • 将此字符串应用于元素

    这可能不是最干净的方法,但它可以在您的测试用例中工作。可能需要对文本运行rtrim方法以删除空白。如果有人在
    之后添加空元素,则会失败

    $(函数(){
    函数getLastTextNode(x){
    var last=x.last();
    var temp=last.contents();//获取最后一个节点中的元素
    var lTemp=temp.last();//获取最后一个节点内的内容
    如果(temp.length>1 | | lTemp[0].nodeType==1){//如果最后一个节点有多个节点或最后一个节点是元素,则继续遍历树
    getLastTextNode(lTemp);
    }否则{//我们有一个textNode
    var val=lTemp[0]。nodeValue;//获取字符串
    lTemp[0].nodeValue=val.substr(0,val.length-1);//切掉逗号
    }
    }
    $('#remCom')。在('click',function()上{
    $('#CorrectHTML').html('');
    $('li')。每个(函数(){
    var li=$(本);
    //查看最后一个字符是否为逗号。
    如果(li.text().substr(-1)==“,”){
    getLastTextNode(li.contents());
    }
    });    
    });
    });
    
    
    
    • 这是由用户插入的文本,并由用户设置样式-li元素的末尾不应有逗号
    • 结尾没有逗号,所以应该保持原样
    • 这里的逗号也应该消失
    删除逗号
      您是否尝试过
      .html()
      ?我尝试过.html(),但是当LI元素的末尾有很多其他html标记时,我不知道如何在LI元素的末尾找到最后一个逗号。使用.html()然后执行.indexOf怎么样('只有当我想删除最后一个逗号时,这才有效,但我只想删除最后一个逗号,它后面没有其他文本,即,这的最后一个索引是您要查找的:可能先搜索…这不正确。看看您的小提琴,它删除了第二个
    • /code>'scomma@camelCase我已经调整了密码,现在可以了ves逗号在字符串中,只删除后面的逗号。解释得很好,谢谢你的评论,它适用于列表中的每个元素,这就是我所需要的。我还添加了一个不同的解决方案,即字符串替换。是的,这种思维方式建议@zedd-也非常有用,谢谢你更新了我的答案以反映@kacpaa的补充信息
      $(function(){
          $('#remCom').on('click', function(){
              $('#CorrectHTML').html('');
              $('li').each(function(){
                  var thisText = $(this).html().trim();
                  var result = /[^,]*$/.exec(thisText)[0];
                  result = result.replace(/(<([^>]+)>)/ig, "");
                  if(!result){
                      thisText = thisText.replace(/,([^,]*)$/,'$1');
                  }
                  $('#CorrectHTML').append('<li>' + thisText + '</li>');
              });    
          });
      });