<强> Fiddle Example
我有一个名为 parseData
的函数,用于从主 js 文件中返回的 json 数据渲染 html 演示文稿。
var data = {
"title": "This is news"
};
$("button").click(function(){
var feedformat = $(this).data('format');
item_html = parseData(feedformat, data);
$('.feedback').append(item_html);
});
function parseData(type, data) {
var item_html = '';
switch(type) {
case 'story':
item_html = '<h5>'+data.title+'</h5>';
break;
}
return item_html;
}
我的问题是,是否可以使用 $.extend
从另一个使用 getscript
点击时动态拉入的脚本文件中添加更多案例?假设我有一个名为 oldnews
的新案例。该案例包含很多 html 标签,但不会经常使用,所以我不想将其存储在主 js 文件中,只想在人们需要时才将其引入。调用我在另一个脚本文件中使用类似以下内容来扩展主js文件中的parseData
?
(function($){
var addcase = $.fn.parseData;
$.fn.addcase = function( type,data ) {
case 'oldnews':
item_html = '<div>'+data.title+',but outdated</div>';
break;
};
}(jQuery));
最佳答案
实际上,这听起来很简单。您真正想要做的是将数据格式的名称映射到生成 HTML 输出的函数。您可以轻松地对此处已演示的内容进行编码:
var parseFunctions = {
story: function(data) {
return '<h5>' + data.title + '</h5>';
},
oldnews: function(data) {
return '<div>' + data.title + ', but outdated</div>';
}
}
当需要输出一些 html 时,您可以这样做:
$("button").click(function(){
var format = $(this).data('format');
if (typeof parseFunctions[format] == 'function')
$('.feedback').append( parseFunctions[format](data) );
});
这是有效的,因为 Javascript 将函数视为任何其他值。您可以将它们分配给变量,复制它们等。通过这种技术,您可以使用另一个包含函数的对象来扩展基本的 parseFunctions 对象。您需要注意的主要事情是按键碰撞。 (两个人试图为数据类型“some_type”定义一个函数。)
关于javascript - 使用 $.extend() 向 jQuery 中的 switch 语句函数添加更多案例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25653267/