2011-03-11 29 views
1

我靶向圖像中的以下HTML這個簡單的jQuery有什麼問題?

<h1 class="logo-site-name"> 
    <span id="logo"> 
    <a href="http://some.link"> 
     <img src="http://www.other.com/some.gif"> 
    </a> 
    </span> 
</h1> 

而且我嘗試用下面的代碼替換圖像,但它不工作。我正在選擇&正確修改嗎?

$('#logo').children('img').attr('src', 'http://www.domain.com/image.gif');

回答

4

img元素不是logo一個孩子,這是一個後代。

你可以做

$('#logo').find('img:first').attr('src', 'http://www.domain.com/image.gif'); 

first是可選的,但如果你只有一個我喜歡的制約。

+0

正確的解釋+1 – 2011-03-11 17:36:07

+0

做什麼$(「#logo img」)。attr(「src」,「http://www.domain.com/image.gif」);而不是使用find方法? – Aaron 2011-03-11 17:44:04

+1

@Aaron雖然這將提供結果的差異,但理解底層選擇器引擎是如何工作的。使用對象作用域並在其內部查找通常會比使用更多全局選擇器更快,而該全局選擇器必須由引擎解析出來並轉換爲「find」調用。這篇文章可能有點過時,但應該提供一些信息,值得一提的是,jQuery在此期間得到了增強。 http://aahacreative.com/2010/07/19/jquery-fastest-method-find-descendents/ – 2011-03-11 17:52:36

1
$('#logo a').find('img').attr('src', 'http://www.domain.com/image.gif'); 

這可能工作..

0

兒童只查找直接子(只有一層).children()。使用查找

$('#logo').find('img').attr('src', 'http://www.domain.com/image.gif'); 
0

您也可以使用上下文。通常更清潔,你會限制你的選擇。是這樣的:

$('a', '#logo').attr('src', 'http://www.domain.com/image.gif'); 
+0

這不會工作。它會設置標籤的來源和範圍,而不是圖像。並且因爲標籤或跨度都沒有src屬性,所以不會發生任何事情。 – 2011-03-12 01:26:20

0

爲什麼不只是做:

$('#logo>a>img').attr('src', 'http://www.domain.com/image.gif'); 

更簡單,更快......

+0

在這種情況下是相同的$('#logo a img')? – 2011-03-11 23:31:37

+0

^^上面看^^甚至更快$(「#logo img」)不需要'a'。 – 2011-03-12 01:23:44

+0

那麼,我做選擇器的方式總是儘可能準確,所以如果你添加,即#logo div內的新圖像,你不必改變它... – Pizzicato 2011-03-12 15:34:10

1
$("#logo img").attr("src","url here"); 

最簡單的辦法! 不需要.find。

簡單!

相關問題