Javascript分割函数和Jquery不能一起工作

5
URL的Get变量需要被解析。我已经用document.location创建了一个jQuery对象,然后使用attr函数获取搜索属性以获取所有变量。但是当我在它上面使用split函数,再使用each()时,会出现错误,指出该对象没有each方法。
TypeError: Object [object Array] has no method 'each'  

代码是:

 $(document.location).attr('search').split('&').each()

我还尝试在第一个函数中使用search属性,但它不允许,即$(document.location.search)会出错。

我还检查了split函数返回的数据类型,控制台显示它是一个对象,这也让我感到困惑,因为它应该是一个数组。

P.S: 上述所有代码都应该放在jQuery的document.ready函数中。


可能是重复的问题:如何获取查询字符串的值? - Chris Farmiloe
4个回答

7
document.location对象创建jQuery对象是无意义的,因为它不是DOM元素。只需从对象中获取search属性,并使用$.each方法而不是.each,因为您正在循环一个数组,而不是元素:
$.each(document.location.search.split('&'), function(){
  ...
});

1
downvoter - 这几乎是正确的答案 - Guffa - 你不能在 split 的结果上调用 .each() - Alnitak
1
document.location.search.split('&').each() TypeError: 对象[object Array]没有each方法。 - S. A. Malik
@backTangent:我已经修复了那部分。使用$.each而不是.each - Guffa
@Guffa:我现在遇到的问题是,当我循环遍历数组时无法获取数组值,$(this)的类型为Object,但如果我使用text()方法,则会显示没有此方法,如果我使用match()则会提示没有此方法。 - S. A. Malik
1
@backTangent:你正在循环遍历一个字符串数组,因此使用$(this)与使用$(document.location)一样毫无意义。你无法获取元素包含的文本,因为它根本不是一个元素。你不能使用match方法,因为你已经将字符串封装在jQuery对象中。只需使用this.match()即可。 - Guffa

5

试试这个:

$.each($(document.location).attr('search').split('&'), function (index, value) {
    alert(index + ': ' + value);
});

jQuery的.each()方法用于遍历jQuery对象,对每个匹配的元素执行一个函数。

但是,从$(document.location).attr('search').split('&')获取的是JavaScript数组,很明显没有'each'方法:这就是为什么你会收到错误。

要在jQuery中循环遍历数组,您需要使用上面提到的$.each()方法。


我已经尝试过这种方法并且它有效,但我更感兴趣的是是什么原因导致了这个问题。这将有助于增长我的知识。 - S. A. Malik
@backTangent 真正的问题在于尝试在不是包装在 jQuery 对象中的 DOM 元素上使用 .attr()。 Guffa 的答案大部分是正确的,而这个答案是错误的。 - Alnitak
1
@backTangent:它“能用”是因为你可以从不是元素的对象创建一个jQuery对象,并且目前使用attr方法从该对象获取属性是可行的,尽管它没有被记录在文档中。这不是jQuery的正常使用方式,而且由于它没有被记录在文档中,不能保证它将继续工作。 - Guffa
attr 方法的文档未说明可用于包装在 jQuery 对象中的普通对象。请参阅 http://api.jquery.com/jQuery/#working-with-plain-objects。 - Guffa

0
据我所知,JS数组没有each()函数。
尝试一下。
var search_arr = $(document.location).attr('search').split('&');
for (var s in search_arr) {
    console.log(search_arr[s];
}

改为


请尝试阅读其他答案和评论,然后再回答。虽然你是严格正确的,但真正的问题在于你无法在document.location上调用.attr - Alnitak
当我正在打我的答案时,没有其他的答案。对此感到抱歉。 - Vince

-1

jQuery的each()函数是要直接从jQuery中调用的;JavaScript数组没有这个函数,因为它不是这样构建的。

我想你正在寻找这个:

$.each($(document.location).attr('search').split('&'), function (index, value) {
    // stuff
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接