programing

jquery html(jquery html) 스크립트 태그 제거

mailnote 2023. 8. 24. 22:23
반응형

jquery html(jquery html) 스크립트 태그 제거

제 페이지에 있는 div의 내용을 에이잭스 호출 결과의 html로 대체해야 합니다.문제는 html에 필요한 스크립트가 몇 개 들어 있는데 jquery html() 함수가 그것들을 제거하는 것 같아서, 나는 응답을 필터링하고 특정 div만 얻어야 합니다.

아약스 응답에서 스크립트 태그를 모두 추출한 후 추가하여 DOM을 수행하는 해결 방법을 생각하고 있지만, 그렇게 하는 데 어려움을 겪고 있습니다.

여기 내 코드가 있습니다.

   $('a.link-vote').live('click',function(){
        var idfeedback = $(this).attr('id').split('-')[1];
        var href = $(this).attr('href');
        $('.feedback-' + idfeedback + '-loader').show();
        $.ajax({
            type: "POST",
            url: href,
            success: function(response){
               var x = $(response).find('#feedback-'+ idfeedback).html();
               $('.feedback-' + idfeedback + '-loader').hide();
               $('#feedback-'+ idfeedback).html(x);

            }
        });
        return false;
    });

나는 이 오래된 주제를 찾았습니다: jQuery - HTML의 스크립트 태그는 jQuery에 의해 구문 분석되고 실행되지 않습니다.

하지만 그것은 어떤 결론입니다.저는 거기서 제안된 해결책을 시도해 보았지만 아무 것도 작동하지 않았습니다.

편집: 저는 그 오래된 주제를 바탕으로 해결책을 찾은 것 같지만, 그것은 예쁘지 않습니다;

  var dom = $(response);
                // var x = $(response).find('#feedback-'+ idfeedback).html();
                $('.feedback-' + idfeedback + '-loader').hide();
                //$('#feedback-'+ idfeedback).html(x);

                $('#feedback-'+ idfeedback).html(dom.find('#feedback-'+ idfeedback).html());

                dom.filter('script').each(function(){
                    var obj = $(this);
                    $('#feedback-'+ idfeedback + ' .feedback-comments').append(obj);
                });

쉬운 방법이 있을 겁니다.

편집: 저는 피곤하고 생각이 없습니다.그냥 네이티브를 사용할 수 있습니다.innerHTML대신 방법.html():

$('#feedback-' + idfeedback)[0].innerHTML = x;

원답:

내 예감은 당신이 링크한 답변은 당신에게 효과가 없다는 것입니다. 왜냐하면 포함된 스크립트는 다음과 같이 호출되기 때문입니다.src스크립트 콘텐츠가 아닌 속성을 사용할 수 있습니다.<script>그리고.</script>태그입니다. 다음과 같이 작동할 수 있습니다.

$.ajax({
    url: 'example.html',
    type: 'GET',
    success: function(data) {

        var dom = $(data);

        dom.filter('script').each(function(){
            if(this.src) {
                var script = document.createElement('script'), i, attrName, attrValue, attrs = this.attributes;
                for(i = 0; i < attrs.length; i++) {
                    attrName = attrs[i].name;
                    attrValue = attrs[i].value;
                    script[attrName] = attrValue;
                }
                document.body.appendChild(script);
            } else {
                $.globalEval(this.text || this.textContent || this.innerHTML || '');
            }
        });

        $('#mydiv').html(dom.find('#something').html());

    }
});

참고로, 이것은 어떤 것도 테스트되지 않았고 아기들을 먹을 수도 있습니다.

저도 같은 문제가 있었지만 쉽게 해결할 수 없는 문제가 더 많았습니다.하지만 저는 해결책을 찾았습니다.

이것은 제가 어떤 식으로든 바꿀 수 없는 저의 유사 소스(HTML)입니다.

<html>
  <body>
    <div id="identifier1">
      <script>foo(123)</script>
    </div>
    <div id="identifier2">
      <script>bar(456)</script>
    </div>
  </body>
</html>

사용한$.get()이 HTML 페이지를 가져옵니다.이제 코드를 문자열로 가지고 있으니, jQuery로 검색할 시간입니다.내 목표는 자바스크립트 코드를 분리하는 것이었습니다.<script>-태그, 그건 DIV의 것입니다.identifier2하지만 그렇지는 않습니다.identifier1그래서 제가 얻고 싶었던 것은.bar(456)결과적으로jQuery가 모든 스크립트 태그를 제거하기 때문에 더 이상 다음과 같이 검색할 수 없습니다.

var dom = $(data); //data is the $.get() - Response as a string
var js = dom.filter('div#identifier2 script').html();

솔루션은 간단한 해결 방법입니다.처음에 우리는 모든 것을 교체할 것입니다.<script>- 태그와 같은 것이 있습니다.<sometag>:

var code = data.replace(/(<script)(.*?)(<\/script>)/gi, '<sometag$2</sometag>');
var dom = $(code);
var result = dom.find('div#identifier2 sometag').html(); 

//result = bar(456)

단순한 해킹이지만 효과가 있습니다!

이것이 가장 쉬운 해결책입니다.

var keepScripts;
keepScripts = true;
$.parseHTML(yourHtmlString, keepScripts);

이렇게 하면 스크립트 태그가 ;)에 유지됩니다.

해라

$('#feedback-'+ idfeedback).empty().append(response);

테스트 안 했어요.확실하지 않습니다.html()실컷<script>하지만 이것을 시도해 보세요.

결과 html 구조를 보여줄 수 있습니까?

2010/11/03 업데이트

제거할 수 있습니다.<script>에서 태그를 붙이다..html()정규 표현의 결과입니다.
당신의 첫 번째 코드에서, 이 줄 뒤에.

var x = $(response).find('#feedback-'+ idfeedback).html();

이런 거 할 수 있어요.

x = x.replace(/\n/g, '{n}')
.replace(/<script.*?<\/script>/g, '')
.replace(/{n}/g, '\n');

언급URL : https://stackoverflow.com/questions/4079179/jquery-html-strips-out-script-tags

반응형