检索链接网址的某些部分的最佳方法是什么?

时间:2013-03-03 14:16:12

标签: jquery html-lists extraction

我正在浏览一些包含链接的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();
    ?
});

4 个答案:

答案 0 :(得分: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 :(得分: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现在将是网址最后部分的数组。

答案 2 :(得分: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

答案 3 :(得分:1)

也许是这样的:

var listOptions = [];

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

您在所有链接中都有/。如果总是如此,则需要先将其删除 它存储在trimmed变量中,然后提取最后一部分。

如果情况并非总是如此,您可以稍微扩展一下逻辑。检查最后一个字符是/,还是删除它。如果不是,则不删除任何内容