2013-01-17 57 views
1

我遍歷一個嵌套在div(.catHOLDER)中的列表,找到img標籤並嘗試返回img src。我遇到的問題是該函數返回所有的函數源代碼而不是字符串值,但奇怪的是,如果我在循環中警告它返回字符串值;Jquery函數返回函數代碼沒有值

$(document).ready(function(){ 
function getnestedimg() { 
    $('.catHOLDER ul').children('li').each(function(i,value) { 
      var imgstr = $(value).find('img').attr('src'); 
      if (imgstr !== undefined) { 
       alert(imgstr); 
      } 
    }); 
} 
getnestedimg(); 
}); 

上面的代碼將顯示與IMG SRC的路徑警報,但如果我嘗試返回imgstr它返回我的功能代碼代替;

$(document).ready(function(){ 
function getnestedimg() { 
    $('.catHOLDER ul').children('li').each(function(i,value) { 
      var imgstr = $(value).find('img').attr('src'); 
      if (imgstr !== undefined) { 
       return imgstr; 
      } 
    }); 
} 
getnestedimg(); 
}); 

返回以下內容;

function getnestedimg() { 
       $('.catHOLDER ul').children('li').each(function(i,value) { 
        var imgstr = $(value).find('img').attr('src'); 
         if (imgstr !== undefined) { 
          //alert(imgstr); 
         //ret urn gotya; 
         return imgstr.val(); 
         } 
       }); 
      } 

誰能幫我在我的困境,或是否有更好的方法來遍歷嵌套股利孩子標籤?

回答

0
$.fn.extend({ 
     getsrc : function() { 
     return $(this).find(">ul> li img").map(function() { 
        return $(this).attr("src"); 
        }); 
      } 
    }); 

    $(document).ready(function() { 
     var catHOLDERimgsrc = new Array(); 
     catHOLDERimgsrc=$(".catHOLDER").getsrc(); 
     console.log(catHOLDERimgsrc); 
    }) 

但爲此插件?我會直接做到這一點:

$(document).ready(function() { 
     var catHOLDERimgsrc = new Array(); 
     catHOLDERimgsrc=$(".catHOLDER").find(">ul> li img").map(function() { 
        return $(this).attr("src"); 
        }); 
     console.log(catHOLDERimgsrc); 
    }) 

IMO的最好的方式來迭代,如果你想所有的圖像SRC否則你改變選擇,然後如果沒有的話,你可以做的就是一組佈置成陣列(也就是價值map函數中的任何東西)

+0

自jq1.9以來我認爲attr正在被棄用,道具應該受到青睞;儘管他們提到了一些例外 – mikakun

+0

'attr'肯定不會被棄用。使用'attr'獲取/設置屬性是被棄用的。它對於其預期目的仍然有用:獲取/設置屬性。 OP是否希望獲得src'屬性或src'屬性完全是另一回事...... –

+0

嗨Mikakun,我嘗試了以下方法,但它沒有工作,它仍然返回了函數代碼; \t \t \t $(文件)。就緒(函數(){ \t \t \t \t功能getnestedimg(){ \t \t \t \t \t變種catholderimages =新的Array(); \t \t \t \t catholderimages = $(」。 catHOLDER ')找到('> ul> li> IMG')地圖(函數(){ \t \t \t \t回$(本).attr( 「SRC」); \t \t \t \t}); \t \t \t \t} \t \t \t \t警報(getnestedimg); \t \t \t}); – user1988149

1

getnestedimg函數內的return聲明,是acually傳遞給each嵌套匿名函數裏面。這就是爲什麼它不會返回任何值給getnestedimg的調用者。建議您將此值存儲在函數變量getnestedimg中。

此外,我建議你閱讀closures

1

我會使用這樣的:

var image_src = $('.catHOLDER ul > li img[src]').first().attr('src'); 

> li img[src]只選擇img有一個src屬性,是li元素的後代標籤。 .first()只抓住第一個。

如果沒有元素符合這些條件,則爲image_str === undefined

+1

@JosephSilber:原始代碼也包含這些內容,但是您可以使用'[src!=「」]'作爲屬性選擇器來排除它們。 – Blender

+0

+1美麗(如往常一樣)。 –

+0

嗨攪拌機,我嘗試了以下,但可悲的是沒有工作; \t \t \t $(文件)。就緒(函數(){ \t \t \t \t功能getnestedimg(){ \t \t \t \t \t變種image_src = $( 'catHOLDER UL>利IMG [SRC]')。第一個( )。ATTR( 'SRC'); \t \t \t \t \t return image_src; \t \t \t \t} \t \t \t \t警報(getnestedimg); \t \t \t}); – user1988149