2017-01-15 1 views
1

Команда сделала много изменений в веб-приложении. Sometines я нашел JQuery код, как этот:Как записывать не существующие элементы

$('#foo').doSomething(); 

Но когда я искал id="foo" в HTML, он больше не существует.

Чтобы помочь нам и предотвратить ошибки, я хочу, чтобы console.log каждый несуществующий элемент перешел на функцию $().

Вот пример:

//I want to hide this text. 
 
$('#foo').fadeOut(5000); 
 
//This id #bar does not exist. 
 
$('#bar').fadeOut(5000); 
 
//I want to console.log that #bar does not exist
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="foobar"> 
 
I don't want to hide this text. 
 
</div> 
 
<div id="foo"> 
 
I want to hide this text. 
 
</div> 
 
<div id="bbar"> 
 
This layer is named bbar and not bar. 
 
</div>

Во время разработчика, я хочу войти что #bar элемент вызывается $('#bar') не существует. Можно ли расширить jQuery? Я хочу, чтобы выводить что-то вроде этого:

Selector #bbar does not exist

Jquery версии 3.1 используется. Я читал JQuery events on non present elements, но я не хочу менять каждый звонок. Я хочу записывать не существующие элементы, например, расширяя jQuery.

+0

вам нужно будет перегрузить 'jQuery.fn .init', который не будет тривиальным из-за всех различных случаев, когда он обрабатывает – charlietfl

ответ

2

Вы, возможно, может перегрузить $ функцию как в https://jsfiddle.net/jm7LtLqe/1/

$ = function(jQuery) { 
    return function(pars) { 
     var result = jQuery(pars); 
     if (result.length==0) console.log('selector has no results',result.selector); 
     return result; 
    } 
}($); 

Edit (требуется ES6 Object.assign скопировать свойства, такие как $.ajax):

$ = Object.assign(function (jQuery) { 
    return function(pars) { 
    var result = jQuery(pars); 
    if (result.length==0) console.log('selector has no results',pars); 
    return result; 
    } 
}($),$); 
+0

. Хорошая идея ... не работает, хотя, если вы используете несколько селекторов, где любой из них существует, а другие - не – charlietfl

+0

Я должен прояснить и сказать, что он работает, но ничего не записывает, если найдено одно совпадение, но другие не совпадают. – charlietfl

+0

Да, если это необходимо, вам, возможно, придется перегружать 'jQuery.fn.init', поскольку @charlietfl сказал – Tommos