1

$("<html><head></head><body>Hello</body></html>").html()

を返しますundefined。もちろん、私の状況はこれよりも少し複雑ですが、このコード行は問題を示しています。どうすればこれを修正できますか?

これは私がやろうとしていることのアイデアを与えます:

var $theSite = $(myHTMLString);//myHTMLString is an external web site (string)
$theSite.filter('input').remove();
alert($myHTMLString.html());
4

5 に答える 5

7

これは、レンダリング可能なHTMLがないためです。

.text()値を返すことに注意してください

$("<html><head></head><body>Hello</body></html>").text();

body タグに HTML を追加すると、結果も得られます。

$("<html><head></head><body><h1>Hello</h1></body></html>").html();

OPコメントに基づく更新

問題を解決するために JQuery を使用する必要はありません。HTML を文字列として扱い、正規表現を使用して入力タグを削除します。

var x = '<html><head></head><body><input type="text" />Hello<input type="button" /><p>p</p></body></html>';

alert(x);

var regX = /(<input([^>]+)>)/ig;

alert(x.replace(regX, ""));
于 2013-09-02T13:55:20.853 に答える
3

次のような DOMParser を使用できます。

var pageStr = "<html><head></head><body><h1>Hello</h1><span>YO</span></body></html>";
var dp = new DOMParser();
var doc = dp.parseFromString(pageStr,'text/html');
alert(doc.documentElement.outerHTML);//"<html><head></head><body><h1>Hello</h1><span>YO</span></body></html>"
$(doc).find("span").remove();
alert($(doc).get(0).documentElement.outerHTML);//"<html><head></head><body><h1>Hello</h1></body></html>"

JSFiddle

更新: answer は DOMParser ポリフィルを実装するようになりました

/*
 * DOMParser HTML extension
 * 2012-09-04
 * 
 * By Eli Grey, http://eligrey.com
 * Public domain.
 * NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
 */

/*! @source https://gist.github.com/1129031 */
/*global document, DOMParser*/

(function(DOMParser) {
    "use strict";

    var
      DOMParser_proto = DOMParser.prototype
    , real_parseFromString = DOMParser_proto.parseFromString
    ;

    // Firefox/Opera/IE throw errors on unsupported types
    try {
        // WebKit returns null on unsupported types
        if ((new DOMParser).parseFromString("", "text/html")) {
            // text/html parsing is natively supported
            return;
        }
    } catch (ex) {}

    DOMParser_proto.parseFromString = function(markup, type) {
        if (/^\s*text\/html\s*(?:;|$)/i.test(type)) {
            var
              doc = document.implementation.createHTMLDocument("")
            ;
                if (markup.toLowerCase().indexOf('<!doctype') > -1) {
                    doc.documentElement.innerHTML = markup;
                }
                else {
                    doc.body.innerHTML = markup;
                }
            return doc;
        } else {
            return real_parseFromString.apply(this, arguments);
        }
    };
}(DOMParser));
于 2013-09-02T14:06:12.423 に答える
0
var $html=$("<html><head></head><body>
             <input type='text' value='hello'><p>hi</p></body></html>");
$("div").html($html.filter('*:not("input")'));

http://jsfiddle.net/tSUFc/1/

于 2013-09-02T14:11:59.567 に答える
-3

あなたはこれを間違って使用しています。最初の部分はセレクターで、次のように 1 つ以上の要素を選択します。

$('html,body') // selects both html and body
$('body div') // selects all 'divs' in 'body' (just like css)

次の.html()ような作品:

// a setter
$('#someElement').html('<strong>This is the new html in #someElement</strong');
// or, as getter:
console.log( $('#someElement').html() ); // returns " '<strong>This is the new html in #someElement</strong' " 
于 2013-09-02T13:54:59.097 に答える