表中获取href

问题描述:

我正在编写一个Greasemonkey脚本,如果只有一个搜索结果的话,它将重定向用户。我试图从一个有许多父表的链接中获取链接。那我想从长相链接像这样的页面的一部分:从<a>表中获取href

<tr class="odd"> 
<td class="name first"> 
    <a href="need this one">Text</a> 
</td> 

尝试的document.getElementById(“名头”),但仍然没有成功。我需要帮助而无需任何外部库。该页面设计为使单元格背景变暗,因此如果没有称为“偶”的类,则假定只有一个结果,并且该部分正常工作。

+1

'class!= id' Nathan的答案是一个非常合理的解决方案。 – Endophage 2011-03-11 22:36:09

+0

嗯,在我的代码中出现错误,因为变量'a'总是返回undefined,甚至不能使用.getAttribute('href')。其实,我试过window.location(a.getAttribute('href')),但我似乎无法理解它有什么问题。 – Exec 2011-03-11 23:00:31

+0

完整地发布您正在使用的确切代码。 Nathan的回答对于所述的问题是有益的。如果您试图关注该链接,则可以使用'window.location.href = a.href;'或'window.location.replace(a.href);'。 – 2011-03-12 01:46:22

基于目标页面和您的明显的目的上(按照第一个结果链接,如果只有一个搜索结果),你想要的代码是这样的:

var EvenRow = document.querySelector ("table.listing tr.even"); 
if (EvenRow == null) 
{ 
    var ResultLink = document.querySelector ("table.listing tr.odd td.name.first a"); 
    if (ResultLink != null) 
     window.location.href = ResultLink.href; 
} 


注:

  1. 有与两个 “名” 和 “第一” 类的多个节点。这是更具体的选择器的原因。这也是Nathan的答案失败的原因(他由于某种原因忽略了tr.odd)。

  2. A checkExistOfEven()功能是不需要的。

  3. 在这种情况下,您可能想要window.location.href =而不是window.location.replace()。前者保留历史中的搜索结果页面,以防出现打嗝。

你可能使用安全getElementsByClassName,因为这是一个Greasemonkey的脚本和those browsers probably support it

var td = document.getElementsByClassName('name first')[0]; 
var a = td.getElementsByTagName('a')[0]; 

使用document.querySelector可能是更容易:

var a = document.querySelector("td.first.name a");