5

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

4

3 回答 3

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'
});
于 2012-05-23T17:07:21.040 回答
0

如果您的警报系统旨在成为类似弹出窗口或类似模式的系统,则用户不必指定容器。但是,您可以允许他传递一个容器以将您的警报框插入:

$.alert({
  type: 'error',
  message: 'This is an error',
  container: $(...) // Optional
});

它将返回您的插件实例或警报容器。

于 2012-05-23T17:09:09.843 回答
0

不,jQuery 并不总是返回this. 可链接性仅意味着如果您的方法没有结果,您应该返回实例本身。

例如,clone()也返回一个新的 jQuery 实例;所以没有什么问题。如果您说“不清楚”,只需记录它,或将方法重命名为例如“ $.fn.getAlert”。

但是,您必须选择方法的签名。第一个选项就像为容器设置一个强制参数。如果你想让它成为可选的,你可以让警报系统成为一个静态方法:$.createAlert(...)带有一个可选参数。

于 2012-05-23T17:09:16.600 回答