javascript - 使用 $.extend() 向 jQuery 中的 switch 语句函数添加更多案例?

标签 javascript jquery html

<强> 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/

相关文章:

javascript - 如何使隐藏的子 div 大于父 div 并在显示时将下一行向下推?

html - 悬停伪类不适用于 Bootstrap 导航栏 anchor 标记

html - 如何使这两个元素彼此相邻

javascript - d3 选择类名包含字符串的元素

javascript - jQuery AJAX php 'post' 返回实际的 PHP 代码

javascript - 如何重新加载/刷新 Stripe Checkout 按钮?

javascript - 插入标记而不丢失 jQuery Mobile 样式

css - 日期文本字段 asp.net

javascript - Mongoose : How to remove item from array by value

javascript - 选择 - 编辑帖子时填充