2014-09-22 159 views
0

我有以下的代碼是爲了顯示一個段落的內容,但它不工作:jQuery的懸停功能不工作,不知道爲什麼

jQuery的

<script> 
$(document).ready(function() { 
    $('.portfolio-excerpt').hover(function() { 
     $('.portfolio-text').addClass('portfolio-hover') 
    }, 
    function() { 
     $('.portfolio-text').removeClass('portfolio-hover') 
    }) 
}) 
</script> 

HTML

<div class="portfolio-img"> <a href="images/portfolio-big.jpg"><img src="images/thumbnail.jpg"/></a> 
    <p class="portfolio-excerpt">They say the only thing better.</p> 
    <p class="portfolio-text">Lorem ipsum</p> 
</div> 

CSS

.portfolio-hover { 
    display:block; 
} 
p.portfolio-excerpt { 
    display:block; 
    height:30px; 
    width:auto; 
} 
p.portfolio-text { 
    display:none; 
} 

這是不工作,我不知道爲什麼。你能幫我嗎?

+1

http://stackoverflow.com/questions/2809024/points-in-css-specificity – 2014-09-22 16:41:16

回答

1

所有你需要做的就是改變你的CSS聲明。

p.portfolio-text{ 
    display:none; 
    } 

p.portfolio-excerpt{ 
    display:block; 
    height:30px; 
    width:auto; 
} 

p.portfolio-hover{ 
    display:block; 
} 

這裏工作頁面 - >JSFIDDLE

你忘了.portfolio-hover之前添加p,只是把它的風格結束。就這樣。

+0

您的腳本正在工作,但後來當我嘗試刪除文本顯示時的摘錄,並將其放回鼠標離開它仍然不適合我,我做錯了什麼?這裏是小提琴http://jsfiddle.net/51ywny19/16/ – 2014-09-22 17:07:57

+0

據我瞭解,你只是想隱藏一個元素,並在同一個地方顯示另一個元素?也許只是嘗試這段代碼,並刪除所有不再需要的類[JSFIDDLE](http://jsfiddle.net/51ywny19/23/) – Kamil 2014-09-22 17:20:04

+0

非常感謝!這段代碼很棒,我也考慮過了,但是因爲我用jquery做了noob,所以我想這樣做,看看它是如何工作的,而不是。你知道它爲什麼不工作嗎?再次感謝你! – 2014-09-22 17:23:35

0

試試這個:

$(document).ready(function() { 
    $('.portfolio-excerpt').hover(function() { 
     $(this).next().addClass('portfolio-hover') 
    }, 
    function() { 
     $(this).next().removeClass('portfolio-hover') 
    }) 
}) 

或者只是使用.show().hide()

$(document).ready(function() { 
    $('.portfolio-excerpt').hover(function() { 
     $(this).next().show(); 
    }, 
    function() { 
     $(this).next().hide(); 
    }) 
}) 

Fiddle Demo

1

附上p標籤了特異性.classtag.class那麼具體。

p.portfolio-excerpt { 
    display:block; 
    height:30px; 
    width:auto; 
} 
p.portfolio-text { 
    display:none; 
} 
p.portfolio-hover { 
    display:block; 
} 

另一種方法是從其他方法中刪除p,如果不需要的話。

此外,你可以因此它是一個更具體一點(使用多類)更新您的CSS:

.portfolio-text.portfolio-hover { 
    display:block; 
} 

您也可以通過使用important「逼」的。

.portfolio-hover { 
    display:block !important; 
} 

如果沒有那些將工作,重新考慮您的訂購(哎,有些人討厭important.multi.classnames - 我得到的)。

最後,您可以使用toggleClass切換現有班級。

$(this).next().toggleClass('portfolio-text'); 

下面是一個例子:http://jsfiddle.net/neknhp8p/

+1

+1,但更確切地說,'toggleClass'不會刪除一個類,而是「切換」它;意思是,它會在缺失的情況下添加它,如果發現則將其刪除。 – 2014-09-22 16:55:08

0

的問題是CSS的樣式是如何應用的,在一個類的定義未覆蓋其他。改變像這樣的風格:

.portfolio-hover { 
    display:block !important; 
} 

或者,你可以更具體與選擇的定義:

.portfolio-text.portfolio-hover { 
    display:block; 
} 
/** OR **/ 
p.portfolio-hover { 
    display:block; 
} 

說明:

具有元素,其中class="classA classB"在CSS是:

.classA { 
    css-property: css-value1; 
} 

.classB { 
    css-property: css-value2; 
} 

將導致classAcss-property優先於classB's,因爲元素上的class屬性的排序。它通過以一種覆蓋另一種的方式實現風格來解決。 See here for more information on CSS precedence.

+0

'!important'應該是最後的手段 - 有更好的方法來解決這種特殊情況 – 2014-09-22 16:45:23

+0

@JamesThorpe這只是你的看法。 '重要的'對於簡單的實用程序類來說非常棒。 – amphetamachine 2014-09-22 16:51:39

1

一些相關的事情 - 這是你的CSS。

第一順序:

.portfolio-hover { 
    display:block; 
} 
/* this comes later in the css, it will override the hover */ 
p.portfolio-text { 
    display:none; 
} 

所以修復它是這樣:

p.portfolio-text { 
    display:none; 
} 
.portfolio-hover { 
    display:block; 
} 

然而p.portfolio-text更具體的比.portfolio-hover所以仍然會被覆蓋 - 最終的解決方法是這樣的:

p.portfolio-text { 
    display:none; 
} 
p.portfolio-hover { 
    display:block; 
} 
0

請將這兩個段落與另一個div一起包起來消失將會平穩。

切換功能的變化顯示從noneblockblocknone裏面sss DIV所有p標籤。

HTML:

<div class="portfolio-img"> <a href="images/portfolio-big.jpg"><img src="images/thumbnail.jpg"/></a> 
    <div class="sss"> 
     <p class="portfolio-excerpt">They say the only thing better.</p> 
     <p class="portfolio-text">Lorem ipsum</p> 
    </div> 
</div> 

JS:

<script> 
    $(document).ready(function() { 
     $('.sss').hover(function() { 
      $('.sss').children('p').toggle(); 
     }); 
    }); 
</script> 

CSS:

<style> 
.portfolio-hover, .portfolio-text { 
    display:block; 
} 
p.portfolio-excerpt { 
    display:block; 
    height:30px; 
    width:auto; 
} 
p.portfolio-text { 
    display:none; 
} 
</style>