2016-02-23 34 views
1

我有以下的HTML,並且我想隱藏元素href指向#something_else如果它的第一個兄弟(或父元素的第一個子)具有類string隱藏元素,如果第一個兄弟具有特定的href

<div class="description"> 
    <span class="string">blah</span> 
    <a class="link" href="#something">blah blah</a> 
    <a class="link" href="#something_else">blah blah blah></a> 
</div> 

我知道這是可能的使用JS/jQuery,例如,

if ($('.description').children().first().hasClass('string')) { 
    $('a[href="#something_else"]').hide(); 
} 

但它可能只有CSS?

+0

指向'#something_else'的'a'不是具有class = string的元素的第一個兄弟或子元素。我假設你想用CSS複製jQuery行爲(即使描述看起來有點偏離)。 – Harry

+0

我的意思是父元素的第一個孩子 - 它有類的描述 – bard

+0

好吧,但*第一個兄弟*部分仍然有點混淆。希望下面給出的答案之一可以幫助你。 – Harry

回答

2

是的,這是完全可能的,至少對於IE7或更高版本的瀏覽器。

下面的方式:它

.description *.string:first-child ~ a[href='#something_else'] { 
 
    display: none; 
 
}
<div class="description"> 
 
    <span class="string">blah</span> 
 
    <a class="link" href="#something">blah blah</a> 
 
    <a class="link" href="#something_else">blah blah blah></a> 
 
</div>

0

可以使用JavaScript或jQuery的。

$(document).ready(function(){ 
 
\t if ($('.description').children().first().hasClass('string')) { 
 
\t \t $('a[href="#something_else"]').hide(); 
 
\t } 
 
});
<div class="description"> 
 
    <span class="string">blah</span> 
 
    <a class="link" href="#something">blah blah</a> 
 
    <a class="link" href="#something_else">blah blah blah></a> 
 
</div>

看到在這裏工作的例子。

謝謝

+0

OP已經使用JQuery完成了。他們想要css解決方案。 – ketan

+0

是的只是添加它 –

1

您可以使用下面的選擇器。它將選擇(和樣式/隱藏)所有a(主播)標籤,其href#something_else,並且是span的兄弟,它是其父代的第一個孩子,並且其類別爲string

我已經設置了所需元素的colorred,而不是隱藏它演示的目的

.description span.string:first-child ~ a[href="#something_else"] { 
 
    color: red; 
 
}
<div class="description"> 
 
    <span class="string">blah</span> 
 
    <a class="link" href="#something">blah blah</a> 
 
    <a class="link" href="#something_else">blah blah blah></a> <!-- this will be selected --> 
 
</div> 
 

 
<div class="description"> 
 
    <span class="notstring">blah</span> 
 
    <span class="string">blah</span> 
 
    <a class="link" href="#something">blah blah</a> 
 
    <a class="link" href="#something_else">blah blah blah></a> <!-- this will not be selected --> 
 
</div>

注:如果元素(第一個孩子)與class="string並不總是span然後Sarhanis的答案是最好的,但如果它總是span,我會r建議不要使用*(更多的個人偏好,但主要是因爲(why) is the CSS star selector considered harmful?)。

+0

性能考慮*僅適用於單獨使用。 * * .string:first-child' *與* .string:first-child相同* - 是否包含純粹的文體風格。 – BoltClock

+0

@BoltClock:但是'span.string'和'* .string'在性能方面是一樣的嗎? – Harry

+0

假設所有'.string'元素都是跨度?我不知道。說實話,我還沒有看到它實際上重要的情況。 – BoltClock

0

這就是:

.description span.string ~ .link[href="#something_else"] { display: none; }
<div class="description"> 
 
    <span class="string">blah</span> 
 
    <a class="link" href="#something">link 1</a> 
 
    <a class="link" href="#something_else">link 2</a> 
 
</div>

0

當然,像這樣:

.description { margin:1em; } 
 

 
.link[href="#something_else"] { display:none; } 
 
.string + .link + .link[href="#something_else"] { display:block; }
<div class="description"> 
 
    <span class="string">string</span> 
 
    <a class="link" href="#something">something</a> 
 
    <a class="link" href="#something_else">something_else</a> 
 
</div> 
 

 
<div class="description"> 
 
    <a class="link" href="#something">something</a> 
 
    <a class="link" href="#something_else">something_else</a> 
 
</div> 
 

 
<div class="description"> 
 
    <span >not a string</span> 
 
    <a class="link" href="#something">something</a> 
 
    <a class="link" href="#something_else">something_else</a> 
 
</div>

相關問題