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

在使用jquery的clone()时,是否有跨浏览器的方法来忽略不透明度?

  •  3
  • FilmJ  · 技术社区  · 16 年前

    我正在使用文档中的表,我希望能够让用户向列表提交一个新项目,然后让它“自动”显示在列表的顶部(是的,这对div来说比较容易,但对我拥有的内容进行操作)。

    我正在使用jquery,并且 clone() 要创建最新表格行的副本,请使用 fadeIn() 更新后显示新项目并将其添加到列表顶部。因为jquery在内部将元素(假设为div)转换为“block”,所以我还将css类更改为“table row”。它很好用。

    整个代码如下:

        var row = $("tbody tr:first").clone().hide(); // clone and then set display:none
        row.children("td[class=td-date]").html("today");
     // set some properties
        row.children("td[class=td-data]").html("data");
        row.children("td[class=td-type]").html("type");
    // fadeIn new row at the top of the table.
        row.insertBefore("tbody tr:first").stop().fadeIn(2000).css("display","table-row"); 
    

    问题是,如果我运行的过程太快,即在fadein完成之前,“clone()”命令最终也会克隆不透明度。

    我可以通过调整上面的第一行来让它在Firefox中工作:

     var row = $("tbody tr:first").clone().css("opacity","1").hide();
    

    我现在担心的是,我不确定这其中的任何一个操作是否有效,和/或“不透明性”是否可以跨浏览器安全地依赖。

    以前有没有人做过类似的事情,并且能够提供关于更可靠方法的任何指针?

    3 回复  |  直到 9 年前
        1
  •  2
  •   Russ Cam    16 年前

    不透明性作为jquery css属性是安全的跨浏览器特性,因为它消除了实现中浏览器的差异。这是来源

    // IE uses filters for opacity
    if ( !jQuery.support.opacity && name == "opacity" ) {
      if ( set ) {
        // IE has trouble with opacity if it does not have layout
        // Force it by setting the zoom level
        elem.zoom = 1;
    
        // Set the alpha filter to set the opacity
        elem.filter = (elem.filter || "").replace( /alpha\([^)]*\)/, "" ) +
        (parseInt( value ) + '' == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")");
      }
    
      return elem.filter && elem.filter.indexOf("opacity=") >= 0 ?
      (parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100) + '': "";
    }
    

    以下工作。 Working Demo -添加 编辑 到要使用它的URL。

      // stop previous animation on the previous inserted element
      var prevRow = $("tbody tr:first").stop(true,true);
    
      var row = prevRow.clone();
      row.children("td.td-date").text("today");
      row.children("td.td-data").text("data");
      row.children("td.td-type").text("type");
    
      row.fadeIn(2000).prependTo("tbody");
    
        2
  •  1
  •   PetersenDidIt    16 年前

    没有理由在克隆上使用hide。克隆尚未添加到DOM中,因此它不可见。

    试试这个:

    var row = $("tbody tr:first").clone(); // clone
    // set some properties
    row.children("td[class=td-date]").html("today");
    row.children("td[class=td-data]").html("data");
    row.children("td[class=td-type]").html("type");
    // fadeIn new row at the top of the table.
    row.insertBefore("tbody tr:first").fadeOut(0).fadeIn(2000).css("display","table-row");
    
        3
  •  0
  •   ChaosPandion    16 年前

    我认为如果您这样做,jquery将处理它。

    var row = $("tbody tr:first").clone().fadeIn(0).hide();