복붙노트

[JQUERY] HTML 태그를 제거하지만 innerHTML을 유지

JQUERY

HTML 태그를 제거하지만 innerHTML을 유지

해결법


  1. 1.

    $('b').contents().unwrap();
    

    이 선택은 모든 엘리먼트는 다음 .contents ()를 사용 의 텍스트 콘텐츠를 대상으로하고 .unwrap ()이 그 부모 요소를 제거하기.

    최고의 성능을 위해, 항상 기본 이동 :

    var b = document.getElementsByTagName('b');
    
    while(b.length) {
        var parent = b[ 0 ].parentNode;
        while( b[ 0 ].firstChild ) {
            parent.insertBefore(  b[ 0 ].firstChild, b[ 0 ] );
        }
         parent.removeChild( b[ 0 ] );
    }
    

    이것은 훨씬 더 빨리 여기에서 제공하는 jQuery를 솔루션에 비해 될 것입니다.


  2. 2.당신은 또한이 같은 .replaceWith ()를 사용할 수 있습니다 :

    당신은 또한이 같은 .replaceWith ()를 사용할 수 있습니다 :

    $("b").replaceWith(function() { return $(this).contents(); });
    

    또는 당신은 그냥 문자열 알고있는 경우 :

    $("b").replaceWith(function() { return this.innerHTML; });
    

    당신도 접근하기 때문에 요소를 많이 풀기하는 경우이 위 .unwrap의 비용보다 훨씬 빠르고 큰 차이를 만들 수 있습니다 ().


  3. 3.것 JQuery와는 .text () 함수 텍스트 만 내부 HTML 요소를 제거하고 반환하는 가장 간단한 방법.

    것 JQuery와는 .text () 함수 텍스트 만 내부 HTML 요소를 제거하고 반환하는 가장 간단한 방법.

    예:

    var text = $('<p>A nice house was found in <b>Toronto</b></p>');
    
    alert( text.html() );
    //Outputs A nice house was found in <b>Toronto</b>
    
    alert( text.text() );
    ////Outputs A nice house was found in Toronto
    

    js 휘티 d 혀라도


  4. 4.이것은 어떤가요?

    이것은 어떤가요?

    $("b").insertAdjacentHTML("afterend",$("b").innerHTML);
    $("b").parentNode.removeChild($("b"));
    

    첫번째 라인 복사 HTML에 직접 B 태그의 뒤에 위치에 B 태그의 내용 후 두번째 라인에만 해당 복사 콘텐츠를 떠나는 DOM에서 태그 (B)를 제거한다.

    나는 일반적으로 쉽게 사용할 수 있도록하는 기능으로이 포장 :

    function removeElementTags(element) {
       element.insertAdjacentHTML("afterend",element.innerHTML);
       element.parentNode.removeChild(element);
    }
    

    모든 코드 만 JQuery와 사용중인 그 타겟팅 요소 (제 1 실시 예에 관한 태그 B)를 선택하는 실질적으로 순수한 자바 스크립트이다. 함수는 순수한 JS이다 : D

    또한보고 :


  5. 5.

    // For MSIE:
    el.removeNode(false);
    
    // Old js, w/o loops, using DocumentFragment:
    function replaceWithContents (el) {
      if (el.parentElement) {
        if (el.childNodes.length) {
          var range = document.createRange();
          range.selectNodeContents(el);
          el.parentNode.replaceChild(range.extractContents(), el);
        } else {
          el.parentNode.removeChild(el);
        }
      }
    }
    
    // Modern es:
    const replaceWithContents = (el) => {
      el.replaceWith(...el.childNodes);
    };
    
    // or just:
    el.replaceWith(...el.childNodes);
    
    // Today (2018) destructuring assignment works a little slower
    // Modern es, using DocumentFragment.
    // It may be faster than using ...rest
    const replaceWithContents = (el) => {
      if (el.parentElement) {
        if (el.childNodes.length) {
          const range = document.createRange();
          range.selectNodeContents(el);
          el.replaceWith(range.extractContents());
        } else {
          el.remove();
        }
      }
    };
    

  6. 6.(커피) 또 다른 기본 솔루션 :

    (커피) 또 다른 기본 솔루션 :

    el = document.getElementsByTagName 'b'
    
    docFrag = document.createDocumentFragment()
    docFrag.appendChild el.firstChild while el.childNodes.length
    
    el.parentNode.replaceChild docFrag, el
    

    더 빨리 user113716의 솔루션보다인지는 모르겠지만, 일부에 대한 쉽게 이해할 수 있습니다.


  7. 7.가장 간단한 대답은 마음 불고있다 :

    가장 간단한 대답은 마음 불고있다 :

    여기에서도 jQuery를하지 않고 자바 스크립트와 함께 할 것입니다

    function unwrap(selector) {
        var nodelist = document.querySelectorAll(selector);
        Array.prototype.forEach.call(nodelist, function(item,i){
            item.outerHTML = item.innerHTML; // or item.innerText if you want to remove all inner html tags 
        })
    }
    
    unwrap('b')
    

    이 오래된 IE를 포함한 모든 주요 브라우저에서 작동합니다. 최근 브라우저에서, 우리는 심지어 노드 목록에서 foreach는 바로 전화를 걸 수 있습니다.

    function unwrap(selector) {
        document.querySelectorAll('b').forEach( (item,i) => {
            item.outerHTML = item.innerText;
        } )
    }
    
  8. from https://stackoverflow.com/questions/4232961/remove-a-html-tag-but-keep-the-innerhtml by cc-by-sa and MIT license