Javascript indexOf函数的条件使用
我使用的脚本在URL中搜索查询字符串,如果找到,则忽略该查询。该脚本可以工作,但仅当存在查询字符串时。我得到的错误是UncaughtTypeError:无法调用undefined的方法'indexOf',因此很明显错误发生在哪里,我只是不知道如何解决它。我只需要在找到查询字符串时执行indexOf,对吗?我怎样才能做到这一点 以下是导致错误的JS:Javascript indexOf函数的条件使用,javascript,url,query-string,Javascript,Url,Query String,我使用的脚本在URL中搜索查询字符串,如果找到,则忽略该查询。该脚本可以工作,但仅当存在查询字符串时。我得到的错误是UncaughtTypeError:无法调用undefined的方法'indexOf',因此很明显错误发生在哪里,我只是不知道如何解决它。我只需要在找到查询字符串时执行indexOf,对吗?我怎样才能做到这一点 以下是导致错误的JS: var href = jQuery(this).attr('href'); var fname = href; var query = href.i
var href = jQuery(this).attr('href');
var fname = href;
var query = href.indexOf("?");
if (query !== -1) {
fname = href.substr(0, query);
}
我认为要解决这个问题,我只需要有条件地执行href.indexOf?;脚本的一部分,但到目前为止我的所有尝试都失败了。在调用indexOf之前检查href是否未定义。的测试?应该工作-也许你的href是空的 仅供参考,如果必须知道是否存在查询字符串,则可以测试链接的搜索属性 测试搜索属性而不是href
var query = this.search;
var fname = query?this.href.split("?")[0]:this.href;
如果找不到querystring或空字符串,此函数将返回其值
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, " "));
}
:
从jQuery1.6开始,.attr方法为尚未设置的属性返回undefined
未定义。索引为。。。将崩溃,但您可以使用以下空字符串:
var query = (href || '').indexOf('?');
它的意思是真的或空字符串:
undefined || '' -> ''
"" || '' -> ''
"a" || '' -> "a"
到目前为止,我所有的尝试都失败了。那么,您尝试了什么呢?因为您正在查看href属性,所以您应该能够只查看search属性,它表示href的querystring。例如,var a=document.createElementa;a、 href=http://www.example.com/?var=val; a.搜索;你试图调试一个错误,OP没有说他想做什么。此脚本是否在A标记上运行?是否要检查window.location?简单var href=jQuerythis.attr'href'| |;将删除错误,但不会修复错误背后的逻辑。在弱类型语言中,通常比条件:href.indexOf?更快/更简单?可以安全地使用href.indexOf?;您还可以安全地使用呼叫表单:.indexOf.callhref、?href&&href.indexOf?;解决您的核心问题。当您可以返回link.search时,会浪费大量的正则表达式。在任何情况下,OP对查询字符串都不感兴趣,但对没有查询字符串的URL很容易。我猜我读问题的时候很累。你答案的第二部分做得很好。非常感谢。
var query = (href || '').indexOf('?');
undefined || '' -> ''
"" || '' -> ''
"a" || '' -> "a"