交换jQuery Selection元素的属性

时间:2013-12-19 18:53:15

标签: jquery asp.net .net html5 .net-2.0

背景

我正在使用.NET 2.0编写的Web应用程序,该应用程序在其页面上使用标准WebControls。它最终会迁移到4.x,但是现在我需要调整它的一些移动行为 - 我的第一个要求是利用HTML5 form input types以便从自定义屏幕键盘格式中受益。

我选择的解决此问题的方法是动态更改渲染元素的输入类型。我目前的局限是:

  • 根据this post,由于Internet Explorer限制,jQuery无法更改input元素type
  • HtmlInputControl(当您向任何HTML元素添加runat='server'时引用的类型)不支持type属性的新值。
  • 如果我只是将具有所需新类型的type属性添加到标准TextBox控件中,它会将type属性呈现两次。

所以我采用了jQuery方法。我的想法是使用额外的标签nexttype实现一个有效的TextBox控件,如下所示:

<asp:TextBox ID="TextBox1" nexttype="phone" runat="server">

在运行时,它呈现如下:

<input name="TextBox1" type="text" id="TextBox1" nexttype="phone">

然后克隆渲染的元素,用适当的nextype对应替换它们的type属性,如下所示:

<input name="TextBox1" type="phone" id="TextBox1">

我想我的jQuery代码应该是这样的:

$(':not([nexttype=""])').clone().attr('type', selectedelement.attr('nexttype')).insertAfter(selectedelement).prev().remove();

selectedelement ,在这种情况下,只是一个占位符,我想象的是当前选择的&#39;选择中的元素。

基本理念是:

  • 选择一个元素
  • 克隆它
  • 更改克隆的“类型”属性
  • 将克隆插入原始
  • 之后的文档中
  • 删除原始

所以,是的,我吮吸jQuery。 =)

问题

  • 我的jQuery one-liner当然是无功能的。我做错了什么?
  • 有更好的方法吗?
  • 那里有什么东西可以做到这一点而且我浪费时间重新发明轮子吗?

要求

  • 我现在无法升级到.NET 4.x;我限于2.0。
  • 我更喜欢不涉及添加外部装配的解决方案。

1 个答案:

答案 0 :(得分:0)

找到我认为有点笨重的解决方案。基本上我遍历每个成员元素,操纵克隆并删除原始:

<script>
    $(':not([nexttype=""])').each(
        function () {
            var _c = $(this).clone();
            _c.attr('type', $(this).attr('nexttype'));
            _c.removeAttr('nexttype');
            _c.insertAfter($(this)).prev().remove();
        });
</script>

仍然接受比这更优雅的解决方案。