Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript indexOf函数的条件使用_Javascript_Url_Query String - Fatal编程技术网

Javascript indexOf函数的条件使用

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

我使用的脚本在URL中搜索查询字符串,如果找到,则忽略该查询。该脚本可以工作,但仅当存在查询字符串时。我得到的错误是UncaughtTypeError:无法调用undefined的方法'indexOf',因此很明显错误发生在哪里,我只是不知道如何解决它。我只需要在找到查询字符串时执行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?;脚本的一部分,但到目前为止我的所有尝试都失败了。

在调用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"