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

jquery:用跨距替换输入

  •  7
  • Mala  · 技术社区  · 14 年前

    我试图用包含输入值的范围来替换输入,以便在单击按钮时能够将它们切换回来。我想这将是最容易做到的两个阶段-添加 <span>[input value]</span> 在输入之前,然后隐藏输入。唯一的问题是我第一部分有问题。我在尝试这样的事情

    $('#container').find('input')
        .parent()
        .prepend('<span></span>') // this effectively creates: <span></span><input value=____>
    

    但是,在prepend语句$(this)中似乎没有定义,所以我不能这样做

        .prepend('<span>'+$(this).children('input').val()+'</span>')
    

    由于有多个输入,我不能简单地将输入值放入变量中。我该怎么做?

    2 回复  |  直到 14 年前
        1
  •  27
  •   Nick Craver    14 年前

    $('input', context).each(function() {
      $("<span />", { text: this.value, "class":"view" }).insertAfter(this);
      $(this).hide();
    });
    

    You can view a more detailed demo here, with per-row edit toggling


    对于原始问题:

    .replaceWith() 为此:

    $('#container').find('input').each(function() {
      $(this).replaceWith("<span>" + this.value + "</span>");
    });
    

    这个 .each() 创建一个闭包,其中 this this.value 例如。

    为了确保编码得到了处理,请将其展开一点以便使用 .text() ,如下所示:

    $('#container').find('input').each(function() {
      $(this).replaceWith($("<span />").text(this.value));
    });​
    

    You can try a demo here

        2
  •  1
  •   Josh Stodola    14 年前

    在我看来,最简单的解决方案是将输入更改为readonly并删除边框(还可能更改背景颜色,具体取决于您的UI),这基本上使它们看起来像一个常规的 <span>

    function spanify() {
      $('#container input')
        .attr("readonly", "readonly")
        .css("borderWidth", "0");
    }
    
    function despanify() {
      $('#container input')
        .removeAttr("readonly")
        .css("borderWidth", "auto");
    }
    

    这可行吗?