18

他のページからHTMLをロードして、そのページからデータを抽出して表示します。

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

それは機能しますが、$(html)私のブラウザが205.htmlにリンクされている画像を読み込もうとしているためです。これらの画像は私のドメインに存在しないため、404エラーがたくさん発生します。

$(html)ページ全体をブラウザにロードせずに、ページを解析する方法はありますか?

4

7 に答える 7

18

正規表現を使用して、すべての<img>タグを削除します

 html = html.replace(/<img[^>]*>/g,"");
于 2013-02-27T14:01:37.570 に答える
16

実際、jQueryのドキュメントを見ると、2番目の引数として「所有者ドキュメント」を渡すことができると書かれています$

したがって、次にできることは、ブラウザが提供されたHTMLに存在する画像を自動的にロードしないように仮想ドキュメントを作成することです。

var ownerDocument = document.implementation.createHTMLDocument('virtual');
$(html, ownerDocument).find('.some-selector');
于 2018-05-05T23:03:43.590 に答える
3

次の方法を使用してhtmlを解析すると、画像が自動的に読み込まれます。

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

HTMLの解析に使用DomParserする場合、画像は自動的に読み込まれません。詳細については、 https://github.com/panzi/jQuery-Parse-HTML/blob/master/jquery.parsehtml.jsを参照してください。

于 2015-11-20T11:09:07.580 に答える
3

古い質問を復活させて申し訳ありませんが、これは、解析されたhtmlが外部アセットをロードしないようにする方法を検索したときの最初の結果です。

Nik Ahmad Zainalddinの回答を採用しましたが、<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, "");

さらに、を削除する機能を追加しましたiframe

これが誰かを助けることを願っています。

于 2016-06-17T02:16:03.617 に答える
1

jQuerysremove()メソッドを使用して画像要素を選択することもできます

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();
于 2013-02-27T14:02:13.230 に答える
1

次の正規表現は、ajaxロードによって返されるデータ文字列からの属性を<head>, <link>, <script>, <style>含むすべての出現を置き換えます。backgroundstyle

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

(正規表現置換を使用する以外に)回避するためのより良い方法があることを望みます。

于 2016-01-02T08:24:38.357 に答える
0

すべてのimg要素を完全に削除する代わりに、次の正規表現を使用して、代わりにすべてのsrc属性を削除できます。

html = html.replace(/src="[^"]*"/ig, "");
于 2017-04-28T00:42:28.863 に答える