【问题标题】:Function to remove background-images for an element and all its children via javascript通过javascript删除元素及其所有子元素的背景图像的功能
【发布时间】:2010-10-27 00:29:22
【问题描述】:

我想使用 Javascript 删除给定元素的所有 CSS 背景图像及其所有子元素。这个问题有点像我问的another question 的衍生问题。最终目标是相同的,为 jQuery UI 小部件设置皮肤。

我目前正在使用jquery/jquery-ui,如果有人会使用它们来解决问题。

有什么想法吗?

奖金:

能够为不同的 jquery-ui 状态删除背景图像真是太好了,但是我几乎决定自己通过 CSS 覆盖这些 bg 图像。

EX: ui-state-hover、ui-state-active 都有与之关联的背景图片。

如果您认为不应该以这种方式进行任何类型的程序化样式覆盖,请告诉我(请提供您的理由)。

【问题讨论】:

  • 也许有一种方法可以选择具有关联背景图像的元素?
  • 我很困惑你为什么不使用jQuery UI ThemeRoller,或者只是为这些元素编写自己的CSS。
  • @Matt Ball - 我需要修改一个小部件以在我的应用程序中具有多种样式。

标签: javascript jquery css jquery-ui


【解决方案1】:

你可以只使用一个简单的 jQuery 选择器(虽然可能很慢)

// You might now need the !important, but it overrules other !important's
$( '*', givenElement ).css( 'backgroundImage', '0 !important' );

但是最好给你的父元素添加一个特定的类,然后使用普通的 CSS 来设置子元素的样式。例如:

// Javascript
$( givenElement ).addClass( 'stateX' );

// CSS, basic example to give you an idea
.stateX div, .stateX span {
    background-image: 0;
}

.stateY div, .stateY span {
    background-image: url( someimage.png );
}

【讨论】:

  • $( '*' ) 有什么作用?另外,与另一个选择器配对时它会做什么......?
  • * 选择所有元素,但在本例中是在givenElement
  • 嗯...我喜欢你用这个去哪里,但是很多子元素将通过 jquery-ui 创建。我真的在考虑某种递归函数,它可以检测给定的选择器是否有子节点,并循环遍历这些子节点以查看它们是否有 BG 图像,如果有则将其删除。我会将此解释添加到问题中
【解决方案2】:
function removeChildBackgrounds(parent) {
  parent.style.backgroundImage = "none";
  var childNodes = parent.childNodes;
  for(var i=0;i<childNodes.length;i++) {
    removeChildBackgrounds(childNodes[i]);
  }
}

这将递归删除所有背景,从父节点开始。

【讨论】:

    猜你喜欢
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 2021-11-24
    • 2012-05-20
    • 1970-01-01
    • 2020-05-01
    相关资源
    最近更新 更多