2010-10-27 80 views
2

我有這樣的HTML標記jQuery的:元素之間移動屬性

<a href="#" title=""> 
    <img src="#" title="image1" /> 
</a> 

<a href="#" title=""> 
    <img src="#" title="image2" /> 
</a> 

<a href="#" title=""> 
    <img src="#" title="image3" /> 
</a> 

和我需要每個圖像的標題並把它放在自己的「一」。我試着用這個功能

$(function() { 

    var title = $('a').find('img'); 

    var updateTitle = title.attr('title'); 

    $('a').attr({ 
     title: updateTitle, 
     alt: 'lol' 
    }); 
}); 

但唯一的結果來做到這一點是相同的標題爲所有「A」(他找到的第一個冠軍)

任何幫助????

非常感謝您

回答

0

試試這個:

$('a').each(function() { 
    var title = $(this).find('img'); 

    var updateTitle = title.attr('title'); 

    $(this).attr({ 
     title: updateTitle, 
     alt: 'lol' 
    }); 
}; 

的Attr()方法只作用於纏集的第一個元素。這同樣適用於其他jQuery方法。對於這種情況,使用每種實用方法都非常方便。

1
$(function() { 
    $('a > img').each(function() { 
     this.parentNode.title = this.title; 
     this.parentNode.alt = 'lol'; 
    }); 
}); 

$(function() { 
    $('a:has(img)').attr('title', function() { 
     return $(this).children('img').attr('title'); 
    }).attr('alt', 'lol'); 
}); 
+0

這和我的實際上是一樣的,倒退。我認爲我的表現會更好,因爲選擇器更簡單('a' vs'a> img')。你怎麼看? – lonesomeday 2010-10-27 12:34:47

+0

@lonesomeday - 問題是'firstChild'在符合W3C標準的瀏覽器中會失敗,因爲第一個孩子將是一個空文本節點,而在IE中,空格不會被編入文本節點。我還建議檢查''將是必要的,以避免篡改沒有兒童圖像的''元素。 – user113716 2010-10-27 12:38:53

+0

公平點。 +1 – lonesomeday 2010-10-27 12:39:51

0
這裏

修改功能。您可以通過每個錨標記必須循環和更新其屬性相應

$('a').each(function(){ 

    var title = $(this).find('img'); 

    var updateTitle = title.attr('title'); 

    $(this).attr({ 
     title: updateTitle, 
     alt: 'lol' 
    }); 
}); 
0

使用attr回調簽名:

$(function(){ 
    $('a').attr('title', function() { 
     return $(this).find('img').attr('title'); 
    }); 
}); 

編輯,以可靠地工作請注意,這是比帕特里克DW版的效率較低。