我正在制作一个在页面上显示警报的jQuery插件。插件本身将警报标记插入DOM。由于jQuery的方法是让所有东西都返回this
来维持链接,所以我遇到了一个我想要反馈的有趣问题。我正在尝试在以下两个选项之间做出决定。
选项一:
$("#content").alert('prepend', {type:'error', message:'This is an error'})
这看起来很简单。警报前置于#content
DOM元素的开头。问题是,目前还不清楚返回的是什么。返回刚刚创建的alert元素是有意义的,但这种方式违背了jQuery的方式。
选项二:
$("<div>").alert({type:'error', message:'This is an error'}).prependTo("#content")
这种方式似乎不太清晰,不太直观,但它更符合jQuery的处理方式,并且很明显将返回哪个元素。
您会选择哪些选项?我担心的是,大多数用户可能不知道您可以$('<div>')
创建新元素。另一方面,我不知道任何众所周知的项目,其jQuery插件方法返回的元素不是它们被调用的元素,但也许有。想法?
答案 0 :(得分:1)
我只是把它放在jQuery命名空间(而不是它的原型):
$.alert({type:'error', message:'This is an error'}).prependTo("#content");
此外,您可能会考虑请求选择器/ DOM节点/ jQuery对象,而不是让用户自己添加它:
$.alert({
parent: '#content', // or $('#content') or document.getElementById('content')
type: 'error',
message: 'This is an error'
});
答案 1 :(得分:0)
如果您的警报系统是类似弹出式或类似模式的系统,则用户不必指定容器。但是,您可以允许他通过容器将警报框插入:
$.alert({
type: 'error',
message: 'This is an error',
container: $(...) // Optional
});
它将返回您的插件实例或警报容器。
答案 2 :(得分:0)
不,jQuery并不总是返回this
。可链接性仅意味着如果没有您的方法的结果,您应该返回实例。
例如,clone()
也返回一个新的jQuery实例;所以它没有任何问题。如果你说“它不清楚”,只需记录它,或将方法重命名为例如“$.fn.getAlert
”。
但是,您必须选择方法的签名。第一个选项就像拥有容器的必需参数。如果您想使其成为可选项,您可以使警报系统成为静态方法:$.createAlert(...)
并带有可选参数。