Javascript jQuery插件错误,带有.wrap()和.wrapAll()
注意:我已经解决了这个问题的主要问题,但是我仍然没有可用的代码,因为我现在做的是一个完全不同的问题,我将在那里打开一个新问题解决它,然后发布这个问题的答案。我还将添加问题的链接。您可以在此处看到我当前的进度: 我正在编写两个基本的jQuery插件,Javascript jQuery插件错误,带有.wrap()和.wrapAll(),javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,注意:我已经解决了这个问题的主要问题,但是我仍然没有可用的代码,因为我现在做的是一个完全不同的问题,我将在那里打开一个新问题解决它,然后发布这个问题的答案。我还将添加问题的链接。您可以在此处看到我当前的进度: 我正在编写两个基本的jQuery插件,$.fn.query和$.fn.build,分别对数组进行排序,并创建要插入到文档中的html代码。我目前正在用Vimeo视频ID测试它,我将用它来显示视频 $.fn.query工作正常,下面的代码出错 $.fn.build = function(pa
$.fn.query
和$.fn.build
,分别对数组进行排序,并创建要插入到文档中的html代码。我目前正在用Vimeo视频ID测试它,我将用它来显示视频
$.fn.query
工作正常,下面的代码出错
$.fn.build = function(params) {
// Parameters //
var options = $.extend( {
'wrapAll' : undefined,
'splitBy' : undefined,
'wrapRow' : undefined,
'wrapEach' : '<div>'
}, params),
build;
// Wrap Each //
if (options.wrapEach !== undefined) {
build = this.wrap(options.wrapEach);
}
// Split into Rows //
if (options.splitBy !== undefined && options.wrapRow !== undefined) {
var tmp;
for (var i = build.length; i > 0; i -= 3) {
tmp = build.splice(i, i + 3).wrapAll(options.wrapRow);
}
build = tmp;
}
// Wrap All //
if (options.wrapAll !== undefined) {
build = build.wrapAll(options.wrapAll);
}
// Return Build //
return build;
};
$.fn.build=函数(参数){
//参数//
变量选项=$。扩展({
“wrapAll”:未定义,
“splitBy”:未定义,
“wrapRow”:未定义,
“水蜜桃”:“
},参数),
建设;
//包扎//
如果(options.wraphy!==未定义){
build=this.wrap(options.wrap);
}
//分成几行//
if(options.splitBy!==未定义和&options.wrapRow!==未定义){
var-tmp;
对于(var i=build.length;i>0;i-=3){
tmp=build.splice(i,i+3).wrapAll(options.wrapow);
}
构建=tmp;
}
//包扎//
如果(options.wrapAll!==未定义){
build=build.wrapAll(options.wrapAll);
}
//返回构建//
返回构建;
};
然后调用(两个)函数:
var query = $(example).query({
shuffle: true,
limit: 6
}).build({
wrapAll: '<div class="container" />',
splitBy: 3,
wrapRow: '<div class="row" />',
wrapEach: '<div class="span4" />'
});
var query=$(示例).query({
洗牌:没错,
限额:6
}).建造({
wrapAll:“,
斯普利比:3,
wrapRow:“,
wrapEach:“”
});
导致以下错误
未捕获错误:未找到错误:DOM异常8
这并不是完全有帮助,因为它显示了一个jQuery错误,它似乎存在于
您可以在这里看到我在JSFIDLE上的javascript代码
PS:我一直在努力遵循最佳实践,因此如果您注意到任何细微的偏差,请告诉我,我会修复代码
我认为您将jQueryDOM函数与数组操作混淆了。没有什么理由在jQuery原型中链接这两者,因为操作是非常独立的 另外,
$.fn.build
并不构建在调用原型之前创建的元素上,而是在其中执行一些wrapAll
方法。为什么不带一个外部容器,并基于数据在其中构建DOM结构呢
尝试以下方法:
$.query = function(data, options) {
// do the array thingie with data
return data;
};
$.fn.build = function(data, options) {
return this.each(function() {
// do the DOM thingies based on data and the context element.
// don’t use wrapAll, bring an outside element instead
});
}
然后
$('<div>').addClass('container').build( $.query(example), {
splitBy: 3,
wrapRow: '<div class="row" />',
wrapEach: '<div class="span4" />'
}).appendTo('body');
我认为您将jQueryDOM函数与数组操作混淆了。没有什么理由在jQuery原型中链接这两者,因为操作是非常独立的 另外,
$.fn.build
并不构建在调用原型之前创建的元素上,而是在其中执行一些wrapAll
方法。为什么不带一个外部容器,并基于数据在其中构建DOM结构呢
尝试以下方法:
$.query = function(data, options) {
// do the array thingie with data
return data;
};
$.fn.build = function(data, options) {
return this.each(function() {
// do the DOM thingies based on data and the context element.
// don’t use wrapAll, bring an outside element instead
});
}
然后
$('<div>').addClass('container').build( $.query(example), {
splitBy: 3,
wrapRow: '<div class="row" />',
wrapEach: '<div class="span4" />'
}).appendTo('body');
使用完整的html元素<代码>否则您可能会遇到跨浏览器问题。这不是导致错误的原因,但会导致问题。
$.fn.query
返回一个不包含dom节点的数组,然后将其视为dom节点数组。这肯定行不通。@KevinB是否有一个简单的解决方法,或者我必须为每个项目创建元素(Dom节点)?我建议不要为这个特定的插件使用$.fn
对象。例如,这将是$。查询:$。构建也需要类似的操作(需要更长的时间)。使用完整的html元素<代码>
否则您可能会遇到跨浏览器问题。这不是导致错误的原因,但会导致问题。$.fn.query
返回一个不包含dom节点的数组,然后将其视为dom节点数组。这肯定不行。@KevinB是否有一个简单的解决方法,或者我必须为每个项目创建元素(Dom节点)?我建议不要为这个特定插件使用$.fn
对象。例如,这将是$。查询
:$。构建
也需要类似的操作(需要更长的时间)。