Javascript 用正则表达式替换String.replace()
我很难让String.replace()与JavaScript一起工作。它在控制台中返回TypeError:url未定义Javascript 用正则表达式替换String.replace(),javascript,jquery,str-replace,Javascript,Jquery,Str Replace,我很难让String.replace()与JavaScript一起工作。它在控制台中返回TypeError:url未定义 var url = $(this).attr("href"); var id = url.replace(/(^.{4})(&remove=1)/, ""); console.log(id); jquery语句$(this.attr(“href”)返回未定义 这就是为什么它说url是未定义的 如果错误为TypeError:url未定义,则表示“$(this.att
var url = $(this).attr("href");
var id = url.replace(/(^.{4})(&remove=1)/, "");
console.log(id);
jquery语句$(this.attr(“href”)返回未定义
这就是为什么它说url是未定义的 如果错误为TypeError:url未定义,则表示“$(this.attr(“href”);”返回未定义。你的正则表达式还可以
尝试输出this、$(this)和$(this.attr(“href”)的内容。您将看到问题所在(您的整个选择器可能已损坏,或者您可能选择了一个没有“href”属性的元素)。这似乎不是DOM对象,或者如果它是DOM对象,则它没有
href
属性。下面是导致这一结论的逻辑和简单的测试应用程序
您的错误意味着url
未定义。由于url
是$(this.attr(“href”)
的产物,因此我们必须弄清楚该表达式是如何定义的
只要安装了jQuery,就不能取消定义$(this)
,如果是,那么引用.attr()
方法时会出现不同的错误。因此,我们可以假设$(this)
必须是有效的jQuery对象
因此,您可能有一个空的jQuery对象,或者this
元素没有href
属性
快速运行显示,任何一种情况都会导致url
未定义。因此,您必须确定此
是否不是DOM对象,或者您的DOM对象是否没有href
属性。这是两个原因之一
以下是测试代码:
// all of these tests print "undefined" to the console
// a DOM object that doesn't have the href attribute because
// #test is just an ordinary div
var url = $("#test").attr("href");
console.log(url);
// an empty jQuery object because #foo doesn't exist
url = $("#foo").attr("href");
console.log(url);
// a non DOM object in the jQuery object
url = $({}).attr("href");
console.log(url);
通过执行以下操作,您可以自己进行更多调试:
console.log("begin marker");
console.log(this);
console.log(this.href);
var url = $(this).attr("href")
console.log(url);
console.log("end marker");
然后,报告那些
console.log()
语句显示的内容。console.log(url)以查看它是什么。javascript还是jquery?@Mika它是相同的输出。url未定义。@Tushar我正在使用JQueryan,您有什么问题?错误消息不是很清楚吗?显然,this
没有href
属性,我尝试了以下代码:var url=$(this.attr(“href”);console.log(url);我得到两个输出。未定义和我想要的字符串。如何获得两个输出?您只显示一条console.log()
语句。该代码是否被调用两次,一次使用有效输入,一次使用无效输入?我不明白你的意思。我已经解释过,this
不是DOM对象,或者如果是,它没有href
属性。您需要找出这两种可能性中的哪一种是问题所在。您没有向我们展示足够的代码/html,我们无法了解这两个问题中的哪一个,因此您要么自己解决问题,要么向我们展示更多的代码/html。@user1408643-我在回答的末尾添加了一些调试建议。