代码之家  ›  专栏  ›  技术社区  ›  CMPalmer

如何使用jQuery切换<label>、<div>或<span>的文本框?

  •  3
  • CMPalmer  · 技术社区  · 17 年前

    我们可以控制代码背后的可见性,以避免填充这两个控件,但我们仍然必须将它们都添加到表单中。

    <label> , <div> <span> replace() jQuery方法动态交换元素。

    问题是,我不仅需要复制内容,还需要复制原始输入控件的样式、属性和大小(在这一点上,我们只讨论文本框-对于下拉列表和列表框,我们有不同的解决方案)。

    蛮力应该有效——“备份”输入控件的所有属性,创建新的“只读”元素,然后用新元素替换输入控件。我要找的是更简单的。

    简而言之,使用jQuery,用标签替换文本框并使标签具有与文本框相同的内容和显示方式的最佳方法是什么?

    $(":text").each( function() {
        var oldClass = $(this).attr("class");
        var oldId = $(this).attr("id");
        var oldHeight = $(this).outerHeight();
        var oldWidth = $(this).outerWidth();
        var oldStyle = $(this).attr("style");
        $(this).replaceWith("<div id='" + oldId + "'>" + $(this).val() + "</div>");
        $("div#" + oldId).attr("class", oldClass);
        $("div#" + oldId).attr("style", oldStyle);
        $("div#" + oldId).width(oldWidth);
        $("div#" + oldId).height(oldHeight);
        $("div#" + oldId).css("display", "inline-block");
    });
    
    3 回复  |  直到 17 年前
        1
  •  4
  •   Matt    5 年前

    这可能不适合你的需要,但有可能。

    <input> <textarea> HTML 4.01 Recommendation 说:




    选项卡导航中包含只读元素。

    另一个关键区别是,具有此属性的元素可以按照您的喜好进行样式设置。(例如,可以删除或更改边框和背景。)因此,不必创建新元素和复制属性,只需添加或删除只读属性即可。

    "input[readonly] {}"

        2
  •  2
  •   Chris MacDonald    17 年前

    为什么不使用像这样的就地编辑插件呢 Jeditable

        3
  •  1
  •   Joel Coehoorn    17 年前

    当我这样做的时候,我不得不“吃掉”你描述的每一次击键,并将其镜像到一个“隐藏的”span标记中,以反映 <input <select 要素span标记都有一个css类,该类使用媒体选择器设置样式,仅用于打印显示,而输入有一个css类,该类设置样式仅用于屏幕显示。

    如果您不介意静态宽度不能缩放到文本的大小,您也可以只设置样式 <输入 标签不显示打印边框,但这很难看。

    推荐文章