2011-03-11 76 views
2

我正在編寫一個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

回答

1

基於目標頁面和您的明顯的目的上(按照第一個結果鏈接,如果只有一個搜索結果),你想要的代碼是這樣的:

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()。前者保留歷史中的搜索結果頁面,以防出現打嗝。

5

你可能使用安全getElementsByClassName,因爲這是一個Greasemonkey的腳本和those browsers probably support it

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