Google Chromeで_console.log
_を使用すると問題が発生しました。突然$(this)
のような要素を出力していたとき、次のように表示されました:
_[<div>, context: <div>]
_
または
_[jQuery.fn.jQuery.init[1]]
_
コンソールで。 (両方とも同じ行から来ました:console.log($(this))
)
この問題は昨日、どこからともなく発生しました。コードに問題はありません。私は他のコンピューターでまったく同じことを記録しましたが、次のように表示されています:
_[<div class='element'></div>, ...]
_
更新:新しいChrome=バージョンはconsole.log()
の出力を変更します
Google Chromeコンソールの元の設定に戻る方法を知っている人はいますか?
質問に答えるには:
Console.log()の以前の出力を取得するための設定はありません。次のいずれかを実行できます。
console.log()
を追加してfunction log()
を上書きしますUser916276によると、console.log(jQuery-Object)の出力が変更されました。
_// output of console.log($jQuerObject)
[<div class='element'></div>, ...] // in chrome <= 23
[<div>, context: <div>] // in chrome 24
_
ユーザー brentonstrine は、context.outerHTMLが常に機能するとは限らないという事実に気付きました。
新しい例 でコードを更新しました。 _jqObject.context.outerHTML
_の存在は、jQuery-Objectを関数に渡す方法に依存するようです。 chrome dev channel (25.0.1323.1)と2つのクロムベースのバージョン(21、22)でテストしました。
_console.log($(this)); // old chrome versions
// new chrome version >23
// if you pass this to the function see my getThis(_this) function
console.log($(this).context.outerHTML);
// if you use a jQuery selector
console.log($(this)[0]); // at least in chrome build 25.0.1323.1
_
誤解を避けるため。この回答は、jQueryオブジェクトを最近のGoogle chromeブラウザ(バージョン24、25)の inbuild console に書き込む動作の変更に関するものです。
chromeソースコードの変更を確認しました Console.cppで および タイムラインビュー で-の変更を確認します- WebInspector 。 console.log()
の変更された動作の原因となる正確な変更を見つけることができませんでした。 ConsoleView.jsへの変更 、 2 、と関係があると思います。 console.log()
がChrome 21、22と同じ出力を返すことを開始したい場合は、バグを報告できます。この twobugs は、変更要求を配置するためのテンプレートとして使用できます。
console.log.apply(console, $(this));
$(this)は、基になるDOMオブジェクトではなくjQuery選択オブジェクトを参照するため、出力は正しいです。
生のDOM要素を出力する場合は、次を試してください。
console.log( $( this ).get(0) )
// Or just
console.log( this )
または、次のこともできます。
console.log( $( this ).html() )
ここに、私が発見したconsole.log.apply(console, obj);
よりもさらに良い解決策があります。 obj
がjQueryセレクターの結果セットである場合、ほぼ同じ出力を提供するconsole.dirxml(obj);
を確認してください。ただし、obj
がjQueryセレクターの結果セットの特定の要素である場合にのみ機能します。
このページでできるデモはこちらです...
var i=0
console.log(++i);
console.dirxml($$('.answer'));
console.log(++i);
console.dirxml($$('.answer')[0]);
console.log(++i);
console.log.apply(console, $$('.answer'));
console.log(++i);
console.log.apply(console, $$('.answer')[0]);
#4のログが「未定義」であることがわかります。
それで、これからはconsole.dirxml
それはシンプルで効果的で、組み込まれているからです。console
の最初の引数としてapply
を渡さなければならないのは、とにかく私と一緒に座ったことはありません。
デフォルトでは、chromeは、console.log($(element))を実行すると、その要素に関連するすべての詳細を含むオブジェクトを返します。
実際に返されるものの例
console.log($('input:first'));
[<input>, prevObject: c.fn.c.init[1], context: #document, selector: "input:first"]
0: <input>
context: #document
length: 1
prevObject: c.fn.c.init[1]
selector: "input:first"
__proto__: Object[0]
もしconsole.log($( 'input:first')[0])を行うと、あなたは望ましい結果を得るでしょう。
お役に立てれば
@brentonstrineの回答の編集は拒否されたため、新しい回答を作成します。しかし、さらに良い解決策については、 このページの他の答え を参照してください。
このデモでは、この新しい方法と通常の方法のロギングを重視する理由を示しています...
// paste this whole block into the console of THIS PAGE and see a working demo!
var domlog = function(obj){ console.log.apply(console, obj); };
domlog($('#answer-13594327'));
// compare ^that^ to the normal element logging...
var normallog = function(obj){ console.log(obj); };
normallog($('#answer-13594327'));
console.log.apply(console, [].slice.call($('p'), 0))
-> ►<p>…</p>, ►<p>…</p>, <p class="label-key">viewed</p>
更新:簡単なソリューション .
コンソール出力の変更の背後にある根拠:
Attributes/textContentを含めないという要求の根拠は何ですか?
DevTools開発者pfeldmanからの回答:
dOMリストをダンプする人は、緻密な外観を高く評価しています。
これは私の解決策であり、console.logを自分の関数でラップするため、問題が発生した行番号を教えてくれないが、重要なログメッセージを出力することで補うなど、いくつかの欠点があります...誰かが望むならそれを改善してください!
注:_underscore.js
_は依存関係です。純粋なJSで実行できると確信していますが、私は常にunderscore.jsに依存しています:)
_// wrap the console.log function
var log = function(data) {
// switch setting
var allowed = true;
if (allowed) {
console.log("LOG");
console.log(typeof data);
if (typeof data == "object" || typeof data == "array") {
_.each(data, function(item) {
console.log(item);
});
} else {
console.log(data);
}
};
_
ここに持ち帰るメッセージは次のとおりです。
_if (typeof data == "object" || typeof data == "array") {
_.each(data, function(item) {
console.log(item);
});
} else {
console.log(data);
}
_
その後、あなたはただ:log($(".some.class"));
とコンソールで_old school
_ DOMオブジェクトとして要素を取得します。