有没有什么好的做法可以避免你的jQuery代码无声地失败?
例如:
$('.this #is:my(complexSelector)').doSomething();
Run Code Online (Sandbox Code Playgroud)
我知道每次执行此行时,选择器旨在匹配至少一个元素或一定数量的元素.是否有任何标准或好的方法来验证?
我想过这样的事情:
var $matchedElements = $('.this #is:my(complexSelector)');
if ($matchedElements.length < 1)
throw 'No matched elements';
$matchedElements.doSomething();
Run Code Online (Sandbox Code Playgroud)
此外,我认为单元测试将是一个有效的选项,而不是搞乱代码.
我的问题可能很愚蠢,但我想知道是否有比我目前正在做的事情更好的选择.此外,也许我错误的方式检查是否有任何元素匹配我的选择器.但是,随着页面的不断增长,选择器可能会停止匹配某些元素,而功能部分可能会无意中停止工作.
当选择器不匹配时,它不一定是错的 ; 这取决于你的申请.你可以编写自己的validateNonEmpty插件:
jQuery.fn.validateNonEmpty = function() {
if (this.length == 0)
throw "Empty list detected - selector: " + this.selector;
return this; // thanks @Matt
};
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
$('something something').validateNonEmpty().doSomething();
Run Code Online (Sandbox Code Playgroud)
另请注意,您要检查长度是否为0,不小于0.
你可以写一个插件:
jQuery.fn.requireElements = function (amount, exactMatch) {
if (amount === undefined) {
amount = 1;
};
if (this.length < amount || this.length > amount && exactMatch) {
throw new Error(this.length " elements instead of " (exactMatch ? "at least " : "") + amount);
};
return this;
};
Run Code Online (Sandbox Code Playgroud)
然后:
$('yourSelector').requireElements(2).bind('click', function () {
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
917 次 |
| 最近记录: |