我正在编码一个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/