1

好的,这应该很明显......

我有一个带有一些文本和链接的 div。我想更改文本的背景颜色,但不是链接。

<div id="one">
    Foo bar <a href="http://stackoverflow.com">link</a> barfoo 
</div>

不明白为什么这不起作用...

$("#one:not(a)").css("background-color", "red");

或者

$("#one, #one *:not(a)").css("background-color", "red");

$("#one").find("a").not(this).css("background-color", "red");

将背景颜色设置为与我想要的完全相反..

谢谢。

4

2 回答 2

0

你试过这个吗?

$("#one").not("a").css("background-color", "red");
$("a").css("background-color", "white");

因为“#one”是包含的 div,所以它会为整个容器着色。在锚后词上进行选择是保留颜色的方法。

否则,您可以添加如下内容,然后仅选择跨度:

<div id="one">
    <span>Foo bar</span> <a href="http://stackoverflow.com">link</a> <span>barfoo </span>
</div>

但这并不完全是语义上的。如果你正在做一些更真实的世界,少一点 barfoo,它可能更实用。

于 2013-11-07T14:55:05.120 回答
0

您遇到的问题是除了链接之外,您的 div 中没有其他元素。

将您的 HTML 更改为

<div id="one">
    <span>Foo bar </span><a href="http://stackoverflow.com">link</a><span> barfoo </span>
</div>

然后你可以做

$("#one :not(a)").css("background-color", "red");

(注意空格)。

您可以自动进行跨度插入:

$("#one").html(function(_,h){
  return '<span>'+h.replace(/<a\s+.*?<\/a>/g,function(s){
       return '</span>'+s+'<span>'
  })+'</span>';
});
$("#one :not(a)").css("background-color", "red");

示范

另一种解决方案是给 div 一个红色并给你的链接一个不透明的颜色:

$("#one").css("background-color", "red");
$("#one a").css("background-color", "white"); // give the color of what's behind the div
于 2013-11-07T14:46:29.860 回答