【问题标题】:JQuery how to set class css data to a div but without setting class name or with other class nameJQuery如何将类css数据设置为div但不设置类名或其他类名
【发布时间】:2010-07-25 19:28:06
【问题描述】:

我需要将一个类数据复制到一个div,但没有设置类名或其他类名。

例如:

$('#blabla').addClass('xxx');

然后删除类名但留下样式数据。问题是我需要设置样式信息,但我无法设置类名,因为它与其他一些代码冲突。

【问题讨论】:

    标签: jquery css class copy


    【解决方案1】:

    使用getComputedStyle 获取应用于对象的所有样式。请注意,这可能是一个非常大的列表。

    var sourceDiv = $('#source');
    var targetDiv = $('#target');
    
    // IE 6,7,8 doesn't support this. Google how to make this cross-browser
    var styles = window.getComputedStyle(sourceDiv.get(0), null);
    var property, value;
    
    for(var i = 0; i < styles.length; i++) {
        name = styles[i];
        value = sourceDiv.css(name);
        targetDiv.css(name, value);
    }
    

    这显示了 Chrome 上每个元素的 207 个属性。如果您将此应用于很多元素,它可能会减慢速度。在这种情况下,一种更快的方法是直接利用 jQuery UI 声明的 CSS 规则和样式,并且只操作在 css 文件中声明的样式,而不是整个计算的样式。

    【讨论】:

      【解决方案2】:

      根据您尝试应用的样式,可以执行以下操作:

      1. addClass()
      2. 从您的元素中获取 CSS 属性并使用 css() 方法应用它们
      3. removeClass()

      代码:

      var blabla = $('#blabla');
      blabla.addClass('xxx');
      blabla.css({
          fontWeight: blabla.css('fontWeight'),
          display: blabla.css('display'),
          float: blabla.css('float'),
      });
      blabla.removeClass('xxx');
      

      【讨论】:

      • 谢谢,但我真的不知道 css 属性,并且它可以更改,因为该类是 JQuery UI 主题的一部分。我可以使用“每个”迭代器吗?
      【解决方案3】:

      您可以遍历该元素的所有计算样式并将它们应用到样式属性中,然后删除类名。或者也许解析 CSS 规则并以这种方式应用来自 .xxx 的样式。

      您可以像这样遍历所有 CSS 属性:

      var elem = $('#blabla')[0],list = {},props;
      if (document.defaultView && document.defaultView.getComputedStyle) {
          props = document.defaultView.getComputedStyle(elem, "");
          $.each(props, function(i, prop) {
              list[prop] = props.getPropertyValue(prop);
          });
      } else if (elem.currentStyle) { // IE
          props = elem.currentStyle;
          $.each(props, function(prop, val) {
              list[prop] = val;
          });
      }
      
      console.log(list) // the entire computed style object
      

      如果您这样做,您还将获得所有继承和计算的样式,甚至来自浏览器 CSS。

      【讨论】:

      • 这似乎是解决方案,但我不知道该怎么做......我会试试的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多