哪个策略在这个jQuery插件中更有意义?

时间:2012-05-23 17:01:37

标签: javascript jquery jquery-plugins

我正在制作一个在页面上显示警报的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插件方法返回的元素不是它们被调用的元素,但也许有。想法?

3 个答案:

答案 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(...)并带有可选参数。