2013-03-03 160 views
0

我正在循环一些包含链接的li。检索链接网址的某些部分的最佳方法?

的联系可以是这样的:

<a href="http://localhost/mlp/books/">Books</a> 

...还有...

<a href="movies/">Movies</a> 

我想是要检索的链接(书籍和电影的最后一级在上面的例子中)并将它们放入一个数组中。

这样做的最好方法是什么?

var listOptions = []; 

$('#navigation ul').each(function(index){ 
    var link = $(this).children().html(); 
    ? 
}); 

回答

1

我会使用jQuery map像这样;

var listOptions = $('#navigation ul').map(function() { 
    var href = $(this).find('a').prop('href'); 

    // Handle a trailing '/', which will screw things up 
    if (href.slice(-1) === '/') { 
     href = href.slice(0, -1); 
    } 

    var last = href.lastIndexOf('/'); 

    // Handle href="foo"; 
    if (last === -1) { 
     last = 0; 
    } 

    // Return the last part of the URL. 
    return href.slice(last); 
}).get(); 

listOptions现在将是URL的最后部分的数组。

2

不知道你的HTML结构到底是什么,但假设你可以得到锚标签:

$('a').each(function (index) { 
    var tokens = this.href.split('/') 
     , link = tokens[tokens.length - 2]; 

    // link is now "books" or "movies" 
}); 

注意,这还假定所有的链接都尾随/

例子:http://jsfiddle.net/JVQsm/

1

把它们放在一个数组:

var listOptions = $.map($('#navigation ul li a'), function(el,i) { 
    return el.href.slice(0,-1).split('/').pop(); 
}); 

//listOptions now contains ['books', 'movies'] etc 

FIDDLE

只需更换他们在网站上:

$('#navigation ul li a').attr('href', function(i, href) { 
    var arr = href.split('/'); 
    return arr[arr.length-2]+'/'; 
}); 

FIDDLE

1

也许是这样的:

var listOptions = []; 

$('a').each(function() { 
    var trimmed = $(this).prop('href').slice(0, -1); 
    listOptions.push(trimmed.substring(trimmed.lastIndexOf('/') + 1)); 
}); 

你已尾中的所有链接/。如果情况总是如此,则需要先将其删除。
这是存储在trimmed变量,然后提取最后一部分。

如果情况并非总是如此,您可以稍微扩展一下逻辑。检查最后一个字符是否为/,比删除它。如果不是,你不会删除任何东西

相关问题