4

デバッグを容易にするために、Chromeデベロッパーコンソールに実際のHTMLを出力します。そこで、Chrome拡張機能であるChrome拡張機能を作成することを考えました。

実際のconsole.log()をconsole.nativeLog()にコピーしました。そして、独自のカスタム関数をconsole.log()に追加しました。

コードは次のとおりです。

    <div class="myDiv">
        <input type="text" id="inp1" title="title1" />
        <input type="text" id="inp2" title="title2" />
        <input type="text" id="inp3" title="title3" />
        <input type="text" id="inp4"  />
        <input type="text" id="test" value="">
    </div>
    <input type="button" id="btn1" value="Add" />
    <script type="text/javascript">
        console.nativeLog = console.log;
    var arr= new Array();
    for(var i=0;i<100;i++){
        arr[i] = i+','+i;
    }
    var fav = JSON.parse('[{"href":"/EMS-ILS/Modules/Supplier_Profile/Supplier_Profile.aspx?ModID=6&WebPageID=38","text":"Supplier Profile"},{"href":"/EMS-ILS/Modules/Customer_Profile/Customer_Profile.aspx?ModID=6&WebPageID=57","text":"Customer Profile"},{"href":"/EMS-ILS/Modules/Costing_Profile/Costing_Profile.aspx?ModID=6&WebPageID=50","text":"Costing Profile"}]')
        console.log = function (val){
            if(typeof(val)=='string'){
                console.nativeLog(val);
                return;
            }
            try{
                for(var x=0;x<arguments.length;x++){
                    var arr = arguments[x];
                    try{
                        if(!arr.length)
                            console.nativeLog(arr);
                        else {
                            for(var i=0;i<arr.length;i++)
                                console.nativeLog(arr[i]);
                        }
                    }catch(err1){
                        console.nativeLog(arr);
                    }
                }
            }   
            catch(err2){
                console.nativeLog(val);
            }
        }           
        $(document).ready(function(){
            console.log('-------------');
            console.log($('input'));
            console.log('-------------');
            console.log($('#inp1'));
            console.log('-------------');
            console.log($('#badId'));
            console.log('-------------');   
                            console.log($('input'), $('#bad'), $('input:text'),  fav, 0, arr)


        });
    </script>

すべて正常に動作しますが、最後の1つです。jqueryオブジェクトに結果が含まれていない場合でも、コンテキストjqueryオブジェクトが出力されます。

これはコンソールの出力です。

ここに画像の説明を入力してください

どうすればそれを防ぐことができますか?何か案は。ありがとう。

4

4 に答える 4

1

このフィドルhttp://jsfiddle.net/tppiotrowski/KYvDX/3/をチェックしてください。これにより、各引数が別々の行に出力され、jQueryオブジェクトが空の場合は[]が出力されます。

console.nativeLog = console.log;
console.log = function(val) {
    var x = 0;
    for (x; x < arguments.length; x++) {
        var item = arguments[x];
        // check if we are dealing with jQuery object
        if (item instanceof jQuery) {
            // jQuery objects with length property are
            // the only ones we want to print
            if (item.length) {
                for (var i = 0; i < item.length; i++) {
                    console.nativeLog(item[i]);
                }
            } else {
                console.nativeLog('[]');
            }
        } else {
            console.nativeLog(item);
        }
    }
}

これは、複数の引数を出力するための実際のconsole.logの動作のより正確な複製です。console.log('a', 'b', 2, [])1行で:http://jsfiddle.net/tppiotrowski/KYvDX/4/

console.nativeLog = console.log;
console.log = function() {
    var x = 0;
    var output = [];
    for (x; x < arguments.length; x++) {
        item = arguments[x];
        if (item instanceof jQuery) {
            if (item.length) {
                for (var i = 0; i < item.length; i++) {
                    output.push(item[i]);
                }
            } else {
                output.push('[]');
            }
        } else {
            output.push(item);
        }
    }
    console.nativeLog.apply(this, output);
}
于 2012-12-04T06:51:08.377 に答える
0

それを試してみてください

    console.log($('#badId')[0] != undefined ? $('#badId') : 'do not exist');

http://jsfiddle.net/bkPRg/2/

于 2012-12-04T06:24:14.623 に答える
0

試す

.html()

また

.text()

また、jquery .lengthプロパティについてこれを確認することもできます。

var arr = arguments[x];
                    try{
                        if(!arr.length)
于 2012-12-04T06:24:45.903 に答える
0

jQueryオブジェクトを出力する前に判断を追加するだけです

console.log = function (val){
    if(typeof(val)=='string'){
        console.nativeLog(val);
        return;
    }
    else if(val instanceof jQuery && val.length==0)
    {
        console.nativeLog("A jQuery object with no html element");
        return;
    }
于 2012-12-04T06:29:26.857 に答える