可以說我有以下的jQuery插件(這僅僅是一個例子來演示點):參考當前上下文設置的jQuery插件選項時,
(function ($) {
$.fn.colourise = function (options) {
var settings = $.extend({
color: "black"
}, options);
return this.each(function() {
$(this).css("color", options.color);
});
};
})(jQuery);
,我想申請到下面的標記:
<div data-color="red">
This text should be red.
</div>
<div data-color="blue">
This text should be blue
</div>
<div data-color="green">
This text should be green
</div>
如果我想作爲插件的選項之一傳遞的值取決於元素,我該如何應用它?目前,我只能通過這樣做來獲得這個工作:
$(function() {
// This feels a bit wrong to have to use a .each() here, but how else do we do it?
$("div").each(function() {
$(this).colourise({
color: $(this).data("color")
});
});
});
即,通過使用.each()方法遍歷每個元素並將插件分別應用於每個元素(這使得插件內的this.each()有點多餘)。感覺就像我應該可以這樣做:
$(function() {
$("div").colourise({
color: [get context of this "div" somehow].data("color")
});
});
但我不能在這裏使用$(this)或this,因爲它們引用文檔。
對不起,缺少http://jsfiddle.net/,但該網站目前對我來說確實很慢,他們一定會遇到一些問題。
沒有,是沒辦法的......你只能在插件裏面,在'each'循環中測試是否設置了'data-color'屬性並且將它的值略。 –
@FelixKling對不起,我應該補充說實際的插件不是我的,所以我不能更改插件代碼。我需要通過選項傳遞值。 – magritte
啊好吧....那麼我不認爲有任何方式,如果插件不允許回調,如@Esailija顯示。 –