2017-03-06 134 views
0

我通过div循环查找一系列div上的单个“活动”类。然后我想从该div中获取数据属性。我得到的数据属性很好,但似乎无法通过return将它传递出该函数。它记录undefinedES6函数返回`undefined`而不是预期的字符串?

const getPostcardLink =() => { 
    console.log('getPostcardLink()...'); 
    $('.postcard').each(function() { 
    if ($(this).hasClass('active')) { 
     const postcard = $(this).data('postcard'); 
     console.log(postcard); 
     return postcard; 
    } 
    return 'error'; 
    }); 
}; 

const getStampLink =() => { 
    console.log('getStampLink()...'); 
    $('.stamp').each(function() { 
    if ($(this).hasClass('active')) { 
     const stamp = $(this).data('stamp'); 
     console.log(stamp); 
     return stamp; 
    } 
    return 'error'; 
    }); 
}; 

function updatePostcard() { 
    const postcard = `images/_${getPostcardLink()}.jpg`; 
    const stamp = `images/_${getStampLink()}.jpg`; 
    console.log(`${postcard} with ${stamp}`); 
} 

$(document).ready(() => { 
    updatePostcard(); 
}); 

数收益...

getPostcardLink()... 
p1 
getStampLink()... 
s1 
images/_undefined.jpg with images/_undefined.jpg 
+3

'getStampLink'不返回任何东西 - 目前根本没有'return'声明那里。 – zerkms

+3

'return stamp;'从'.each'回调中返回,而不是'getStampLink'。其他功能类似。 'return'不会跨越函数边界,它只会从它所包含的函数中返回。 –

+0

如何处理返回的“error”的情况?使用'.filter()'替换'.each()',检查'.filter()'的返回值是否具有大于'0'的'.length'。 – guest271314

回答

1

使用.filter()和相同的模式在getStamp()

const getPostcardLink =() => { 
    console.log('getPostcardLink()...'); 
    let elems = $('.postcard').filter(function() { 
    return $(this).hasClass('active') 
    }); 
    if (elems.length) { 
     const postcard = elems.data('postcard'); 
     console.log(postcard); 
     return postcard 
    } 
    return "error" 
}; 

function updatePostcard() { 
    let cLink = getPostcardLink(); 
    let sLink = getStampLink(); 
    if (cLink !== "error") const postcard = `images/_${cLink}.jpg`; 
    if (sLink !== "error") const stamp = `images/_${sLink}.jpg`; 
    if (postcard && stamp) console.log(`${postcard} with ${stamp}`); 
} 
+1

您也可以像'$('。postcard')一样将选择器传递给'filter',filter('.active')' – gyre