在replaceWith之后,jquery中的数据对象是未定义的

时间:2012-02-29 19:32:43

标签: javascript jquery undefined replacewith

我正在编写一个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'并不是必须的,所以如果你想出另一个解决方案就可以了。

1 个答案:

答案 0 :(得分:0)

好的,我解决了。

感谢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/