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
'programing' 카테고리의 다른 글
도커 컴포지트와 도커 컴포지트 스타트의 차이점은 무엇입니까? (0) | 2023.08.24 |
---|---|
배경색 전환 (0) | 2023.08.24 |
git가 파일을 "업데이트가 필요하다"고 말하는 것은 무엇을 의미합니까? (0) | 2023.08.24 |
'총 연결 수'가 너무 많습니다.정상 상태입니까?MaxScale 2.3.9 (0) | 2023.08.24 |
하나를 제외한 모든 클래스 제거 (0) | 2023.08.19 |