需要帮助。我有一个名为Rigged的库,类似于jQuery。 这段代码不完整,它只是我代码的一个例子(我的lib还有超过500行)
private RadioTwoFragment radioFragment;
所以,我调用switch (checkedId) {
case R.id.radio1:
radioFragment = new RadioOneFragment();
getFragmentManager().beginTransaction()
.replace(R.id.radio_frg_container, radioFragment)
.commit();
break;
case R.id.radio2:
radioFragment = new RadioTwoFragment();
getFragmentManager().beginTransaction()
.replace(R.id.radio_frg_container, radioFragment)
.commit();
break;
}
方法或(function () {
var arr = [];
var Rigged = function ( selector ) {
return Rigged.fn.init( selector );
};
Rigged.fn = Rigged.prototype = {
map: function ( callback ) {
var results = arr, i = 0;
for ( ; i < this.length; i++) {
results.push(callback.call(this, this[i], i));
}
return results;
},
each: function (callback) {
return this.map(callback);
},
// this is just example of my code
css: function (attr, value) {
if (attr == 'display') {
return this.each(function (current) {
current.style.display = value;
});
}
},
hide: function () {
return this.each(function (current) {
// here's a problem
current.css('display', 'none');
});
}
};
Rigged.init = Rigged.fn.init = function (selector) {
var elset, i = 0;
if (typeof selector === "string")
elset = document.querySelectorAll(selector);
else if (...)
.... etc
this.length = elset.length;
for ( ; i < this.length; i++) { this[i] = elset[i]; }
return this;
}
Rigged.ajax = Rigged.fn.ajax = function ( obj ) {
// code here
}
window.Rigged = window.$ = Rigged;
}());
没有问题,但是在名为map
的方法的定义中,它会输出错误未捕获的TypeError:current.css不是控制台中的一个功能。
当我在each
之类的索引文件中调用hide
时,它可以正常工作,但在css
中它无效。当我用$("#text").css('display', 'none);
替换行Rigged.prototype
时,它正常工作。
有人可以告诉我为什么current.css('display', 'none');
方法不起作用吗?
EDITED .map()方法 + e(回调)到当前
答案 0 :(得分:0)
这是解决方案。
hide: function () {
// Try to log `this`
console.log( this );
/*return this.each(function (current) {
current.css('display', 'none');
});*/
this.css('display', 'none');
}
当您致电.each()
时,您正在运行.hide()
两次。一个在.hide()
本身,第二个在.css()
,这就是问题所在。
答案 1 :(得分:0)
您正在向对象添加DOM节点,而不是类似jQuery的对象,dom节点。
当您映射每个元素时,将 DOM元素传递给回调函数:
results.push(callback.call(this, this[i], i));
//-------------------------------^^^^^^^ here
当你这样做时
current.css('display', 'none');
在.hide()
方法中,您尝试在没有此类方法的DOM元素上调用.css()
,因此您会收到错误。