2017-07-29 81 views
1

我寫了一個小功能,基本上說要檢查,如果一些文字正是這樣或那樣:爲什麼控制檯提供完整的jsFiddle鏈接?

function doSelect(text) { 
    return $wikiDOM.find(".infobox th").filter(function() { 
    return $(this).text() === text; 
    }); 
} 

的我爲了得到最後一個字符串的一些鏈接的/wiki/後像<a href="/wiki/Geum_River" title="Geum River">Geum River</a>, <a href="/wiki/Korea" title="Korea">Korea</a>

let pattern = new RegExp('^\/wiki\/'); 
    doSelect("Location").siblings('td').find('a').map(function(i, el) { 
    return console.log(el.href.replace(pattern, '')); 
    }); 
運行此

但是,當我在控制檯檢查我得到整體的jsfiddle鏈接

https://fiddle.jshell.net/wiki/Geum_River 
https://fiddle.jshell.net/wiki/Korea 

我期望

Geum_River 
Korea 

回答

1

的問題是,因爲你使用的<a>href屬性。通過這樣做,你檢索URI的完整的絕對路徑,即:https://fiddle.jshell.net/wiki/Geum_River,而不是相對路徑:/wiki/Geum_River

要改變這種行爲,直接使用屬性值,使用attr()

let pattern = new RegExp('^\/wiki\/'); 
doSelect("Location").siblings('td').find('a').map(function(i, el) {  
    var result = $(this).attr('href').replace(pattern, ''); 
    console.log(result); 
    return result; 
}); 

也是雙檢查你是否正確使用map()。它的意圖是創建一個數組,但是你沒有對它做任何響應。這將是值得使用each()代替,而不return,如果你想要做的是循環遍歷選定的元素:

let pattern = new RegExp('^\/wiki\/'); 
doSelect("Location").siblings('td').find('a').each(function(i, el) {  
    var result = $(this).attr('href').replace(pattern, ''); 
    console.log(result); 
}); 
+0

是真的!我需要簡單地循環它們,你介意在你的答案中加入循環嗎?謝謝你 –

+1

邏輯是一樣的,只要將'map'改爲'each'並移除'return'。我爲你更新了答案 –

1

您也可以嘗試這樣的:

//let pattern = new RegExp('^\/wiki\/'); 
doSelect("Location").siblings('td').find('a').each(function(i, el) {  
    var name = $(this).attr('href').split('wiki/')[1].trim(); 
    console.log(result); 
});