2010-07-08 35 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");