我创建了一个简单的jQuery扩展(它是我的第一个)。
$('#selector').myExtensionOtherMethod();
当我调用方法this
时,this._ext
不包含var result = coordinates.map(function(point) {
return {
lat: point.lat(),
lng: point.lng()
};
});
// access it
console.log(result[0].lat);
// or
console.log(result[0]['lat'];
变量。我知道这是其他范围,但我知道有两种方法可以在两种方法中访问该变量。我能做到吗?
答案 0 :(得分:2)
这不是一个范围问题。这是因为jQuery原型$.fn
为您提供了一个jquery对象this
。即使您每次将新的jQuery对象设置为上下文时都选择相同的元素,以便属性消失。您可以将该属性放在DOM元素上并实现您想要的结果。
(function($) {
var MyClass = function(opt) {};
//one of the methods of my extension
$.fn.myExtension = function(opt) {
this[0]._ext = new MyClass(opt);
return this;
};
$.fn.myExtensionOtherMethod = function() {
if (this[0]._ext) {
//do something ..
}
return this;
};
}(jQuery));
//using ..
$(document).ready(function() {
$('#selector').myExtension({
//options ..
});
$('#selector').myExtensionOtherMethod();
});
这只是上面的一个简单示例。如果你的选择器找到多个元素,你应该循环它们。但是我只是抓住了第一个索引,因为你选择了ID。
小提琴:https://jsfiddle.net/AtheistP3ace/gd1ehk0d/
如上所述@charlietfl,我同意这个评论。很高兴解释为什么你所做的并没有奏效,但可能有更好的方法来实现你所寻找的目标。