html字符串转为jquery对象后,怎么转回html字符串呢 ?

一段html字符串转为jquery对象后,用jquery的val(' ') 方法清空里面的某一个input值后,怎么转回html标签呢 ?

图片描述

点击 [+] 后 ,出现下面一个表单 ,但是 属性价格怎么清空呢 ? 难倒我了 。。。。。

图片描述

我是先获取 点击按钮 所在的整个div 的 html标签加内容(变量为 : add_attr_html), 然后 通过 $(add_attr_html).find('td').next().find('input').val(''); 清空 “属性价格” 这个 input表单的 value ,然后打算转为html 字符串再 追加到页面,但是从 jquery 对象转 回去的时候卡住了 , 我用$(add_attr_html)[0] 试了一下,value 值还在,没有被清除掉。。。。。。

阅读 7.3k
4 个回答

首先你要搞清楚两个问题:
一是基础数据类型和复杂数据类型的区别,基础数据类型是按指存储,复杂数据类型是按地址(或者指针存储)。
二是jquery的$()方法是什么意思:根据传入的内容返回一个jquery对象

add_attr_html变量是一个基础数据类型:字符串。$(add_attr_html)是调用jquery方法生成的一个复杂数据类型:jquery对象。然后$(add_attr_html)可以使用jquery的方法,但这些方法是对$(add_attr_html)这个对象进行操作,不是对add_attr_html这个变量进行操作。所以你虽然使用.val()方法清空了input的值,但是add_attr_html字符串还是原来的样子,所以当你再次$(add_attr_html)的时候,其实是再一次调用的$()方法对add_attr_html字符串进行了jquery对象化操作,两个次的$(add_attr_html)完全不是同一个对象,所以value值还存在。

解决方案一:用一个变量保存$(add_attr_html)就好

var $tr = $(add_attr_html);//用一个变量保存这个对象
$tr.find('input').val('');
var _html = $tr.parent().html();

解决方案二:你要处里这个需求其实你把问题复杂化了:复制一个当前节点,然后清空内容,添加到新的地方

var $tr= $(this).parents('tr').clone(true);//克隆一个目标节点,参数true可以把事件特性一起克隆过来
$tr.find('input').val('');
$(this).parents('table').append($tr);

看例子,demo
图片描述

先追加再操作
$(add_attr_html).appendTo(el).find('td')...

你这获取元素有问题把 你把属性加个的文本框 加个class 例如text
然后$(add_attr_html).find('.text').val('')

.parents().clone().insertAfter()
$(this)用parents加选择器找到目标dom,然后clone下再insertAfter到目标位置后边(兄弟级别)。如果clone没清空的话那再手动清下就好。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏