2010-07-08 63 views
0

我有一個簡單的HTML佈局,像這樣:IE 6 jQuery選擇

<html> 
    <head> 
    <title>HTML Page</title> 
    </head> 
    <body> 
    <table> 
     <tr> 
     <td> 
      <a href="some.html">Text</a> 
     </td> 
     </tr> 
    </table> 
    </body> 
</html> 

我試圖選擇具有這樣的選擇的第一個TD:

html > body > table > tr:nth(0) > td:nth(0) > a 

可惜,這似乎並沒有工作,並給我一個錯誤,說:「未定義的對象」,當我把它包在一個try catch塊。

有沒有人見過這個?

EEF

+0

,你看到了什麼錯誤? – 2010-07-08 15:48:12

+0

除了不起作用的代碼之外,還描述了您想要用文字選擇的內容。有人可能會給你一個更簡單的解決方案。 – istruble 2010-07-08 15:53:19

+0

@istruble我認爲他的問題與它所得到的一樣冗長。他正在收到「未定義」錯誤,並列出了他的選擇器。 – HurnsMobile 2010-07-08 15:54:47

回答

1

tr不是直接在table,即使它看起來像從你的標記。每行放在thead,tbodytfoot元素內,如果您省略了<tbody>開始標記,瀏覽器會爲您自動插入它。因此,要選擇行,你不得不說:

table>tbody>tr 

這是由於地方開始標籤被允許在許多情況下(例如將被省略的HTML解析的一個怪癖,如果你省略<body>,瀏覽器會認爲它第一次遇見某些網頁內容)。

但是,XHTML有更多的常規解析規則,其結果是如果頁面在XML模式下解析,則不會有暗示tbody。所以編寫一個匹配這兩種情況的選擇器會更困難。

此外,nth選擇器是一個選擇器的非標準jQuery擴展,這將導致使用緩慢的JavaScript'Sizzle'選擇器引擎而不是瀏覽器的快速內置選擇器引擎(如果可用,即不是IE6 -7)。嘗試堅持標準的CSS選擇器來避免這種情況。

您最好避免使用DOM風格遍歷而不是選擇器來獲取所需元素。 DOM本身提供的表和行的rowscells名單,這是比什麼jQuery提供了可能更容易:

var table= $('#someselector table').get(0); // however you access the table 
var cell= table.rows[0].cells[0];    // or whatever rows/column you want 
$(cell).doSomething();      // ... 
0

我相信你會需要的是選擇修改爲以下內容:

$('html > body > table > tbody > tr:nth(0) > td').html() 

如果可能的話我會盡量類/ ID的添加到您的元素,以避免含糊不清的潛在問題(ish)這樣的選擇器。

+0

我已經嘗試添加tbody,但它仍然給我的錯誤,爲什麼我使用這樣的選擇器的原因是因爲我讓他們通過nokogiri(軌道上的紅寶石)返回 – RailsSon 2010-07-08 15:51:27

+0

爲了測試清酒嘗試一些更模糊的像'$('td:nth(0)')。html()'並且看看你得到了什麼。你有沒有試過提醒你的選擇器的內容,看看它的價值是什麼? – HurnsMobile 2010-07-08 15:56:59

3

你不需要從「html」開始。想一想:這是如何使它比僅僅以「身體」開始更好?我不認爲你需要那種親子特異性。我敢打賭:

$('table td:first') 

應該是你所需要的。

0

你的選擇器大部分是無用的。嘗試:

$("td:first > a"); 

它會在文檔中選擇a童第td的。

如果您有更多的表,你可能需要添加這樣的一個ID,然後你可以選擇它:

$("#table_id td:first > a");