有条件地使用indexOf函数

时间:2013-12-10 16:08:22

标签: javascript url query-string

我正在使用一个脚本在URL中搜索查询字符串,如果找到则忽略该查询。该脚本有效,但仅在存在查询字符串时才有效。我得到的错误是Uncaught TypeError: Cannot call method 'indexOf' of undefined所以很明显错误发生的地方,我只是不确定如何解决它。我只需要在找到查询字符串时执行indexOf,对吗?我怎样才能做到这一点?

这是导致错误的JS:

var href = jQuery(this).attr('href');
var fname = href;
var query = href.indexOf("?");

if (query !== -1) {
    fname = href.substr(0, query);
} 

我想解决这个问题我只需要有条件地执行脚本的href.indexOf("?");部分,但到目前为止我所有的尝试都失败了。

5 个答案:

答案 0 :(得分:0)

在调用indexOf之前检查href是否未定义。

答案 1 :(得分:0)

“?”的测试应该工作 - 也许你的href是空的?

Live Demo

function getFName(link) {
  var href = link.href || "no href found";
  return href.split("?")[0];
}

var a = document.createElement("a");
a.href = "http://www.google.com/search?q=something";
var fname = getFName(a);
window.console && console.log(fname);
a.href = "http://www.google.com/search";
fname = getFName(a)
window.console && console.log(fname);

仅为了您的信息,如果您必须知道是否存在查询字符串,则可以测试链接的搜索属性

测试搜索属性而不是href

var query = this.search;
var fname = query?this.href.split("?")[0]:this.href;

答案 2 :(得分:0)

http://jsfiddle.net/dqzhz/

var url = getURL("http://www.example.com?q=1&x=2");
alert(url);

function getURL(link) {
    url = document.createElement('a');
    url.href = link;
    return url.protocol + "//" + url.host;
}

答案 3 :(得分:0)

http://api.jquery.com/attr/

  

从jQuery 1.6开始,.attr()方法为尚未设置的属性返回undefined。

undefined.indexOf(...)会崩溃,但你可以回到这样一个空字符串:

var query = (href || '').indexOf('?');

这意味着“真实的东西或空字符串”:

undefined || '' -> ''
       "" || '' -> ''
      "a" || '' -> "a"

答案 4 :(得分:-2)

如果找不到,则此函数返回查询字符串或空字符串的值。

function getQueryParameterByName(name) {

            name = name.replace(/[\[]/, "\\\[").replace(/[\]]/gi, "\\\]");
            var regexS = "[\\?&]" + name + "=([^&#]*)";
            var regex = new RegExp(regexS, "i");
            var results = regex.exec(window.location.href);
            if (results == null)
                return "";
            else
                return decodeURIComponent(results[1].replace(/\+/gi, " "));
}