programing

jQuery 이미지를 로드하지 않고 HTML 구문 분석

elecom 2023. 8. 26. 10:28
반응형

jQuery 이미지를 로드하지 않고 HTML 구문 분석

다른 페이지에서 HTML을 로드하여 해당 페이지에서 데이터를 추출하고 표시합니다.

$.get('http://example.org/205.html', function (html) {
    console.log( $(html).find('#c1034') );
});

그것은 효과가 있지만, 그것 때문에.$(html)제 브라우저는 205.208에 연결된 이미지를 로드하려고 합니다.그 이미지들은 제 도메인에 존재하지 않아서 404개의 오류가 많이 발생합니다.

페이지를 구문 분석할 수 있는 방법이 있습니까?$(html)전체 페이지를 브라우저에 로드하지 않고 사용할 수 있습니까?

실제로 jQuery 문서를 보면 두 번째 인수로 "소유자 문서"를 전달할 수 있다고 나와 있습니다.$.

따라서 브라우저가 제공된 HTML에 있는 이미지를 자동으로 로드하지 않도록 가상 문서를 만드는 것이 가능합니다.

var ownerDocument = document.implementation.createHTMLDocument('virtual');
$(html, ownerDocument).find('.some-selector');

정규식 사용 및 모두 제거<img>꼬리표

 html = html.replace(/<img[^>]*>/g,"");

오래된 질문을 부활시켜서 미안하지만, 이것은 구문 분석된 html이 외부 자산을 로드하는 것을 중지하는 방법을 검색할 때의 첫 번째 결과입니다.

저는 Nik Ahmad Zainaldin의 대답을 받아들였지만, 그 사이에 어떤 요소가 있다는 점에서 약점이 있습니다.<script>태그가 지워집니다.

<script>
</script>
Inert text
<script>
</script>

위의 예에서Inert text스크립트 태그와 함께 제거됩니다.대신 다음과 같은 작업을 수행하게 되었습니다.

html = html.replace(/<\s*(script|iframe)[^>]*>(?:[^<]*<)*?\/\1>/g, "").replace(/(<(\b(img|style|head|link)\b)(([^>]*\/>)|([^\7]*(<\/\2[^>]*>)))|(<\bimg\b)[^>]*>|(\b(background|style)\b=\s*"[^"]*"))/g, "");

추가로 제거할 기능을 추가했습니다.iframes.

이것이 누군가에게 도움이 되기를 바랍니다.

다음 방법을 사용하여 HTML을 구문 분석하면 이미지가 자동으로 로드됩니다.

var wrapper = document.createElement('div'),
    html = '.....';
wrapper.innerHTML = html;

사용하는 경우DomParserHTML을 구문 분석하기 위해 이미지가 자동으로 로드되지 않습니다.자세한 내용은 https://github.com/panzi/jQuery-Parse-HTML/blob/master/jquery.parsehtml.js 을 참조하십시오.

jQuerys를 사용할 수 있습니다.remove()영상 요소를 선택하는 방법

console.log( $(html).find('img').remove().end().find('#c1034') );

HTML 문자열에서 제거합니다.비슷한 것

console.log( $(html.replace(/<img[^>]*>/g,"")) );

배경 이미지와 관련하여 다음과 같은 작업을 수행할 수 있습니다.

$(html).filter(function() {
    return $(this).css('background-image') !== ''; 
}).remove();

다음 정규식은 모든 발생을 대체합니다.<head>, <link>, <script>, <style>,포함하여background그리고.styleAjax 로드에서 반환된 데이터 문자열의 특성입니다.

html = html.replace(/(<(\b(img|style|script|head|link)\b)(([^>]*\/>)|([^\7]*(<\/\2[^>]*>)))|(<\bimg\b)[^>]*>|(\b(background|style)\b=\s*"[^"]*"))/g,"");

테스트 정규식: https://regex101.com/r/nB1oP5/1

(regex replace를 사용하는 것 외에) 더 나은 작업 방법이 있으면 좋겠습니다.

모든 img 요소를 모두 제거하는 대신 다음 정규식을 사용하여 모든 src 특성을 삭제할 수 있습니다.

html = html.replace(/src="[^"]*"/ig, "");

언급URL : https://stackoverflow.com/questions/15113910/jquery-parse-html-without-loading-images

반응형