我正在使用一个脚本在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("?");
部分,但到目前为止我所有的尝试都失败了。
答案 0 :(得分:0)
在调用indexOf之前检查href是否未定义。
答案 1 :(得分:0)
“?”的测试应该工作 - 也许你的href是空的?
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)
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)
从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, " "));
}