代码之家  ›  专栏  ›  技术社区  ›  Peter Pik

从字符串中删除强标记及其内容

  •  0
  • Peter Pik  · 技术社区  · 9 年前

    html格式

    <p>
        <br>
        2-3 spsk græsk yoghurt, gerne 10 % 
        <strong>Dressing: </strong>
        <br>
        1 lille spsk god mayonnaise
        <br>
        1-2 tsk æbleeddike 
        <br>
        1-2 tsk honning 
        <br>
        himalayasalt og friskkværnet hvid peber
        <br>
    </p>
    

    到目前为止,我有这个,但似乎只有当它位于顶部时才会删除强标记

    var ingredientsArray = ingredients.split('<br>').map(it => it.trim()).filter(it => !!it && !it.startsWith('<strong>'));
    
    4 回复  |  直到 9 年前
        1
  •  2
  •   trincot    9 年前

    您可以使用DOM API进行以下操作:

    function stripStrong(html) {
        var span = document.createElement('span');
        span.innerHTML = html;
        [...span.getElementsByTagName('strong')].reverse().forEach( 
            strong => strong.parentNode.removeChild(strong)
        );
        return span.innerHTML;
    }
    
    var html = `<p>
        <br>
        2-3 spsk græsk yoghurt, gerne 10 % 
        <strong>Dressing: </strong>
        <br>
        1 lille spsk god mayonnaise
        <br>
        1-2 tsk æbleeddike 
        <br>
        1-2 tsk honning 
        <br>
        himalayasalt og friskkværnet hvid peber
        <br>
    </p>`;
    
    console.log(stripStrong(html));

    请注意,如果 strong 标记具有属性、样式,与其他 坚强的

        2
  •  2
  •   adeneo    9 年前

    根据目标是什么,将字符串解析为HTML很可能是一种方法?

    var ingredients = '<p><br>2-3 spsk græsk yoghurt, gerne 10 % <strong>Dressing: </strong><br>1 lille spsk god mayonnaise<br>1-2 tsk æbleeddike <br>1-2 tsk honning <br>himalayasalt og friskkværnet hvid peber<br></p>';
    
    var doc = new DOMParser().parseFromString(ingredients, 'text/html');
    
    [].forEach.call(doc.querySelectorAll('strong'), function (item) {
        item.parentNode.removeChild(item);
    });
    
    document.body.innerText = '<pre>' + doc.body.innerHTML + '</pre>';
        3
  •  0
  •   user663031 user663031    9 年前

    与其试图操纵字符串,不如将CSS规则应用于将其放入DOM的任何位置:

    strong { display: none; }
    
        4
  •  -1
  •   jcubic    9 年前

    var ingredientsArray = ingredients.replace(/<strong>[\s\S]*?<\/strong>/g, '')
         .split('<br>').map(it => it.trim()).filter(Boolean);