javascript:使用哈希字符拆分HREF字符串

时间:2012-07-09 16:31:00

标签: javascript jquery split

我有以下代码返回函数中每个链接的url:

var nav_link;
$('#nav_what-we-do').find('.top-dropdown').find('a').each(function(index, elem) {
    console.log("Descendant: " + elem.tagName + " " + elem.href);
    the_link = $(this);
    nav_link = elem.href.split('#');
    if (nav_link[0] === '/what-we-do/') {
        the_link.attr('href','#'+nav_link[1]);
        the_link.click(function() {
            var tab_id = $(this).attr('href');
            selectTab(tab_id);
            return false;
        });
    }
});

控制台打印如下链接:

Descendant: A http://localhost/testsite/what-we-do/#solutions
Descendant: A http://localhost/testsite/what-we-do/#features
Descendant: A http://localhost/testsite/what-we-do/features/test
Descendant: A http://localhost/testsite/what-we-do/solutions/test2

现在我只想要那些包含哈希(#)的链接,并使用这个哈希将它们拆分。 然后我想检查array(0)是否包含字符“/ what-we-do /”。 我试图像这样拆分链接:

nav_link = elem.href.split('#');

IF 部分无效。

有人能告诉我我做错了什么。

修改

根据T.J。的建议

$('#nav_what-we-do').find('.top-dropdown').find('a').each(function(index, elem) {
    //console.log("Descendant: " + elem.tagName + " " + elem.href);
    var the_link = elem.href,
        hashIndex = the_link.split("#");
    if(hashIndex.length == 2) {
        console.log(hashIndex);
        console.log("Descendant: " + elem.tagName + " " + elem.href);
        console.log('First part is: ' + hashIndex[0].indexOf("/what_we_do/"));
    }
    if (hashIndex.length == 2 && hashIndex[0].indexOf("/what_we_do/") !== -1) {
        the_link.attr('href', "#" + hashIndex[1]);
        the_link.attr('href', the_link.substring(hashIndex));
        the_link.click(function() {
            var tab_id = $(this).attr('href');
            selectTab(tab_id);
            return false;
        });
    }
});

如果我在控制台中打印,我会得到:

["http://localhost/testsite/what-we-do/", "solutions"] site_javascript.js:133
Descendant: A http://localhost/testsite/what-we-do/#solutions site_javascript.js:134
First part is: -1 site_javascript.js:135

["http://localhost/testsite/what-we-do/", "features"] site_javascript.js:133
Descendant: A http://localhost/testsite/what-we-do/#features site_javascript.js:134
First part is: -1 

第一部分的值应为 hashIndex [0] .indexOf(“/ what_we_do /”)

可能会发生什么,因为 hashIndex 的字符串是 / what-we-do /

2 个答案:

答案 0 :(得分:3)

我想你可能想要:

var nav_link;
$('#nav_what-we-do').find('.top-dropdown').find('a').each(function(index, elem) {
    console.log("Descendant: " + elem.tagName + " " + elem.href);
    var the_link = elem.href,
        hashIndex = the_link.indexOf("#");
    if (hashIndex !== -1 && the_link.indexOf("/what-we-do/") !== -1) {
        the_link.attr('href', the_link.substring(hashIndex));
        the_link.click(function() {
            var tab_id = $(this).attr('href');
            selectTab(tab_id);
            return false;
        });
    }
});

(注意我声明了the_link;如果它已经在迭代器函数之外的某处声明了,你可以删除它,但它看起来应该是本地的。)

或者替代(因为技术上,如果/what-we-do/ > 之后<{1}} , >

var nav_link;
$('#nav_what-we-do').find('.top-dropdown').find('a').each(function(index, elem) {
    console.log("Descendant: " + elem.tagName + " " + elem.href);
    var the_link = elem.href,
        split = the_link.split("#");
    if (split.length === 2 && split[0].indexOf("/what-we-do/") !== -1) {
        the_link.attr('href', "#" + split[1]);
        the_link.click(function() {
            var tab_id = $(this).attr('href');
            selectTab(tab_id);
            return false;
        });
    }
});

我限制了它,所以如果在第一个哈希之后有一个哈希,那就不是匹配。

答案 1 :(得分:0)

这是失败的,因为你正在检查一个完整的绝对路径(http:// .....)而不是它的一个标记(/ what-we-do /)。

有几种方法可以解决这个问题 - 最简单的方法可能就是检查你正在寻找的令牌是否在URL中(而不是与当前完全相同)。

if (nav_link.indexOf('#') != -1 && nav_link[0].indexOf('/what-we-do/') != -1) {
    ...