我正在编码一个jQuery插件,我需要一些按钮来具有双重状态(例如编辑/保存)
我通过JSON获取此信息,并将其插入按钮中,如下所示:

node
    - current //['primary'/'secondary']
    - primary // some info
    - secondary // some info


单击按钮后,我将在此处更改操作。所以我想通过模板和从button.data获取的信息替换整个链接。
因为我不仅要替换innerHtml,而且要替换外部,所以我必须使用'replaceWith'。然后,我将“数据”复制到新按钮,并(理想情况下)删除较旧的按钮。

changeButtonAction : function(button, selector){
      var node = button.data('node'),
           info;

      if(node.current == 'primary'){
           info = node.secondary;
           node.current = 'secondary';
      }else{
           info = node.primary;
           node.current = 'primary';
      }

      button.replaceWith(multiReplace(OPERATION_ITEM, info, true));
      button.data('node', $.extend( true, {}, node));

      ... //bit of interaction
 }


事实是:一旦该函数出现,我就会松散新数据,因为它表示未定义。
有人可以帮忙吗?使用'replaceWith'不是必须的,因此,如果您提出其他解决方案,则可以。

最佳答案

好的,我解决了。

感谢Diode,我尝试在jsfiddle中重现它。单击功能也不起作用,因此我对代码进行了一些更改。而不是用文本代替:

button.replaceWith(multiReplace(OPERATION_ITEM, info, true));
button.data('node', $.extend( true, {}, node));


用一个对象来做:

var button2 = $(multiReplace(OPERATION_ITEM, info, true))
    .data('node', $.extend( true, {}, node));
button.replaceWith(button2);


您可以看到它的作用:
http://jsfiddle.net/p8vMR/9/

关于javascript - replaceWith后,jquery中的数据对象未定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9505438/

10-09 06:13