jquery:用跨度替换输入
我正在尝试使用包含输入值的跨度替换输入,以便能够在单击按钮时将其切换回来。 我认为这最容易分两个阶段完成 – 在输入前添加[input value]
,然后隐藏输入。 唯一的问题是我在第一部分遇到了麻烦。 我正在尝试这样的事情
$('#container').find('input') .parent() .prepend('') // this effectively creates:
但是,在prepend语句里面$(this)似乎是未定义的,所以我不能这样做
.prepend(''+$(this).children('input').val()+'')
由于有几个输入,我不能简单地将输入值放入变量中。 我该怎么办?
对于更新的问题:
你可以这样做(基于评论,每行编辑):
$('input', context).each(function() { $("", { text: this.value, "class":"view" }).insertAfter(this); $(this).hide(); });
您可以在此处查看更详细的演示,每行编辑切换 。
对于原始问题:
你会想要使用.replaceWith()
:
$('#container').find('input').each(function() { $(this).replaceWith("" + this.value + ""); });
.each()
创建一个闭包,其中this
引用input元素,因此您可以使用this.value
作为示例。
为确保编码得到处理,请将其展开以使用.text()
,如下所示:
$('#container').find('input').each(function() { $(this).replaceWith($("").text(this.value)); });
你可以在这里试一下
在我看来,最简单的解决方案是将输入更改为只读并删除边框(并可能更改背景颜色,具体取决于您的UI),这实际上使它们显示为常规标签。
function spanify() { $('#container input') .attr("readonly", "readonly") .css("borderWidth", "0"); } function despanify() { $('#container input') .removeAttr("readonly") .css("borderWidth", "auto"); }
这可行吗?