【问题标题】:Where is jQuery clone getting these style rules from?jQuery 克隆从哪里获得这些样式规则?
【发布时间】:2013-01-22 10:43:10
【问题描述】:

这不是我的确切代码,而是相关部分:

<div id="myDiv" class="class1 class2" style="">
   ... other elements ...
</div>

我的 jQuery 代码克隆元素,然后最终用克隆替换原始元素:

clonedDiv = $('#myDiv').clone(true);
... some other code ...
$('#myDiv').replaceWith(clonedDiv);

这可以正常工作 - 唯一的问题是克隆的 div 以某种方式获得了原始样式中没有的属性:

<div id="myDiv" class="class1 class2" 
     style="overflow: hidden; height: 1px; padding-top: 0px; margin-top: 0px; padding-bottom: 0px; margin-bottom: 0px;">
   ... other elements ...
</div>

这是从哪里来的……?有什么办法可以预防吗? (我目前正在“破解”并明确将其设置回空字符串。)

【问题讨论】:

  • 你能告诉我你的完整代码吗?我们克隆jsfiddle.net/uQHx7/6时没有添加样式
  • 克隆具有 id 属性的元素可能会产生一些奇怪的副作用。 id 应该是唯一的,而您通过克隆具有 id 属性的元素来打破该规则。
  • @jakee - 不过,我在 DOM 中从来没有两个具有相同 ID 的元素。我将它克隆到一个变量中,然后替换原来的,所以只有 1 个具有 id 的元素。
  • @muthu - 我也无法真正复制 jsfiddle 中的错误......代码太复杂,无法在此处发布,我想我正在寻找有关其他内容的指针可能导致它。看看有没有其他人遇到过这个错误

标签: jquery styles clone


【解决方案1】:

这可以通过一些javascriptjQuery 来设置样式。

如果你想删除样式属性,那么这样做:

clonedDiv = $('#myDiv').removeAttr('style').clone(true);
//---------------------^^^^^^^^^^^^^^^^^^^---------remove the attr then clone it.

【讨论】:

  • 这基本上就是我在帖子最后一行中提到的“黑客”所做的事情......我只是想知道是否有任何方法可以防止它发生在首先,或者至少了解它的来源
【解决方案2】:

这些样式可能是您的浏览器添加的默认样式。看,所有的值都是 0px。我看不出这些样式将如何在克隆元素中产生问题。

您可以查看相关帖子:

Browsers' default CSS stylesheets

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 2012-09-27
    • 1970-01-01
    相关资源
    最近更新 更多