我正在尝试从网页抓取所有链接,对这些链接进行排序,使用关键字查找链接,并将列表中的关键字打印到控制台。我使用split()方法查找关键字的链接,但是,当我的硬编码字符串将正确拆分时,当我尝试从数组中拆分值时,相同的代码将无法工作。
我有一个URLS(arrCopy)数组,我想在第一个数组值上使用split()。但是,我无法使用下面的代码来使用它。
//arrCopy is an array of strings (URLs)
var tempStringArr = arrCopy[0]; //get first URL from arr
var tempStringSplit = tempStringArr.split("/"); //doesn't work!
如果我将URL硬编码为字符串,则相同的代码可以正常工作。
//this code works
var exampleString = "http://bit.do/contact.php?layout=js.do"; //hardcoded string
var exampleStringSplit = exampleString.split("/"); //array created from exampleString
我的完整代码演示了上述示例:http://js.do/gloss/90965
我已经注释掉了不起作用的代码。
如何让split()方法处理数组值?我只是错误地使用split()?
答案 0 :(得分:3)
问题在于你循环遍历一个元素数组,然后在数组中添加这些元素。
因此,在您尝试var tempStringArr = arrCopy[0];
时,您实际上正在抓住锚(a)元素。
因此,为了使您的代码有效,您可以这样做:
var tempStringArr = arrCopy[0].href; //Get the href from the element.
OR:
var tempStringSplit = tempStringArr.href.split("/"); //doesn't work! //added .href
http://js.do/gborbonus/gets-and-prints-sorted-list-of-links-then-splits-each-link
我已经添加了一个js.do,所以你可以看到它正在运行。
答案 1 :(得分:1)
这是因为你在arrCopy中构建的数组是一个元素数组。因此,当您进行拆分时,您尝试在html元素而不是字符串上执行此操作。试试这个:
var tempStringArr = arrCopy[0].href;
答案 2 :(得分:0)
您是否尝试过使用字符串函数? var tempStringSplit = String(arrCopy[0]).split("/");
答案 3 :(得分:0)
parseHTMLForLinks返回锚元素数组,您可能需要从锚元素中获取URL,如果您想要链接的href属性,可以在printList中替换此片段并尝试:
for (var i=0, j=arr.length; i<j; i++) { //make copy of links from HTML DOM
arrCopy[i] = arr[i].href;
}
如果你想要来自innerHTML的网址,你可以试试这个:
for (var i=0, j=arr.length; i<j; i++) { //make copy of links from HTML DOM
arrCopy[i] = arr[i].innerHTML;
}
答案 4 :(得分:0)
在拆分
之前将其转换为字符串// added the code below at line 53
var t = [];
alert(t.length)
t = arrCopy[0].toString().split("/")
alert(t.length); // alerts 4