2011-05-14 123 views
2

嘿傢伙,對不起,我是新來jquery。我一直試圖用CSS做所有事情,但我試圖爲一個網站顯着削減我的代碼。 我正在嘗試做的事情是,當一個div.class img被徘徊時,它會同時更改2個圖像的源文件。 我可以得到這個發生,但我需要這兩個圖像有不同的源文件。 我也試圖讓代碼簡單到足以讓我可以在HTML中設置圖像源,而不必在腳本中設置每個圖像。原因是實際的應用程序將有幾百個圖像。在CSS和腳本中定義翻轉狀態太笨重。幫助多個圖像jQuery的懸停

這是我到目前爲止。

<script> 
    $(function() { 
     $(".on img").hover(
      function() { 
    $(".on img").attr("src", $(".on img").attr("src").split(".").join("_hover.")); 
}, 
function() { 
    $(".on img").attr("src", $(".on img").attr("src").split("_hover.").join(".")); 
     }); 
    }); 

    </script> 

所以我用一個DIV類指定任何我想改變的圖像,或將徘徊。 因此,當該類中的任何其他圖像被徘徊時,任何圖像都將具有翻轉狀態。

現在的問題是,當該類中的所有圖像都發生變化時,它們都將更改爲相同圖像源,我需要它們更改爲自己的圖像源。所以x.jpg變成x_hover.jpg,y.jpg變成y_hover.jpg等。

這裏是這個例子的HTML。

<div class="on"><img src="api.jpg" /> </div> 
    <div class="on"><img src="ex.jpg" /></div> 
    <div class="on"><img src="api.jpg" /> </div> 
    <div class="on"><img src="ex.jpg" /></div> 

謝謝!!任何人都可以提供幫助,我們將不勝感激。我是Jquery的新手,我一直在尋找如何做到這一點的日子。

-JK

+0

如果我將鼠標懸停在''在第一'div'哪些其他的圖像應該改變?他們應該改變什麼? – 2011-05-14 17:01:18

+1

永遠不要對新事物道歉:-)你發現了jQuery真是太好了,我們都必須從某個地方開始! – Bojangles 2011-05-14 17:18:09

+0

@Jam - > jQ太棒了,我想回到過去的5個月,重新開始! :) – 2011-05-14 17:22:34

回答

2

我能想出這個,改變徘徊,在元素的src最簡單的方法是:

$('.on img').hover(
    function(){ 
     var cur = this.src.split('.'); 
     var extension = cur.pop(); 
     this.src = cur.join('.') + '_hover.' + extension; 
    }, 
    function(){ 
     this.src = this.src.replace('_hover',''); 
    } 
); 

JS Fiddle demo


編輯響應質疑,在評論這個答案,從@Jamie:

你知不知道我怎樣才能使這個適用於在該div類中的所有圖像,但讓每個圖像都變成它自己的圖像?例如:a.jpg改爲a_hover.jpg,然後改回a.jpg,而b.jpg改爲b_hover.jpg,然後恢復爲b.jpg。如果光標將圖像懸停在該div類中,我希望同時更改所有這些圖像。

下面的jQuery腳本會照顧的,對你:

$('.on img').hover(
    function(){ 
     $('.on img').each(
      function(){ 
       var cur = this.src.split('.'); 
       var extension = cur.pop(); 
       this.src = cur.join('.') + '_hover.' + extension; 
      }); 
    }, 
    function(){ 
     $('.on img').each(
      function(){ 
       this.src = this.src.replace('_hover',''); 
      }); 
    } 

); 

JS Fiddle demo

編輯修復上面的URL,由於某種原因,它是一個圖像,而不是演示。傻我......它現在鏈接到實際的演示。抱歉。

+0

+1 WOW David!nice!(順便說一句:什麼是.pop()用於?) – 2011-05-14 17:19:07

+0

@roXon:'pop()'只是從數組中取出最後一個元素('cur')並將其賦值給'extension'變量,並且謝謝:) – 2011-05-14 17:20:45

+0

Arrrrgh我花了一些時間終於看到.pop是一個很好的老javascript方法!哈哈好老JS;)太棒了! – 2011-05-14 17:29:07

0

試試這個:

$(function() { 
    $(".on img").hover(
      function() { 
        $(this).attr("src", $(this).attr("src").split(".").join("_hover.")); 
      } , 
      function() { 
        $(this).attr("src", $(this).attr("src").split("_hover.").join(".")); 
      }); 
    }); 

在此背景下$(this)會給你懸停圖像,而不是與該類別的所有圖像。

+0

對不起,我認爲我不是很擅長解釋,我可以單獨獲得每個圖像翻轉,我之前使用$(這個) 我正在嘗試要做的是讓所有的圖像在這個類別中的圖像在一個被徘徊時改變。 AND 讓每個圖像與其他圖像有所不同。 – 2011-05-15 05:03:00

1

只是我採取與正則表達式

$('.on img').hover(function() { 
    this.src = this.src.replace(/(.*)(\.[^.]+)$/, '$1_hover$2'); 
}, function() { 
    this.src = this.src.replace(/_hover(\.[^.]+)$/, '$1'); 
}); 

小提琴:http://jsfiddle.net/nWc2D/

+0

+1 @Gary(如果你有一些時間的話)有什麼好的建議,你想建議正則表達式? (在此先感謝!) – 2011-05-14 17:36:24

+0

你知道嗎,我什至不記得我是如何開始學習正則表達式的。就這樣發生了。 :D要做的最好的事情就是練習匹配使用Regex Buddy或在線工具等工具的字符串,我喜歡http://regex.larsolavtorvik.com/ - 從基礎開始 - http://www.regular -expressions.info/quickstart.html - 當你開始學習貪婪,lookbehinds,lookarounds等等時,它變得很難,但是繼續練習,你就會到達那裏! – 2011-05-14 17:43:20

+0

不錯,謝謝!我一定會!你的例子看起來就像你說的:看起來像「一旦你明白了:你擁有它!」我確信使用簡約的「標誌」很有趣。就像在瓶子裏建造一艘船一樣! :)所有的分裂,加入,ifs,after,befores,數組......樂趣有趣的樂趣 – 2011-05-14 17:52:25