IE 6 JQuery选择器

时间:2010-07-08 15:47:05

标签: jquery css selector internet-explorer-6

我有一个简单的HTML布局,如下所示:

<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

5 个答案:

答案 0 :(得分:3)

您无需从“html”开始。想一想:这比仅仅从“身体”开始更好吗?我认为你也不需要那种亲子特异性。我敢打赌:

$('table td:first')

应该就是您所需要的一切。

答案 1 :(得分:2)

“选择第一个td” - $('td:first')$('td').first()

有关详细信息,请参阅:first Selector.first()的文档。

答案 2 :(得分:1)

tr不在table内,即使它看起来像是你的标记。每行都放在theadtbodytfoot元素中,如果省略<tbody>开始标记,浏览器会为您静默插入。所以要选择你要说的行:

table>tbody>tr

这是由于HTML解析的一个怪癖,在许多情况下允许省略start-tags(例如,如果省略<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();                        // ...

答案 3 :(得分:0)

我相信您需要将该选择器修改为以下内容:

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

如果可能的话,我会尝试将类/ id添加到你的元素中,以避免像这样的模糊(ish)选择器的潜在问题。

答案 4 :(得分:0)

你的大多数选择器都没用。尝试:

$("td:first > a");

它会选择文档中第一个a的{​​{1}}子项。

如果你有更多的表,你可能想要添加一个id,然后你可以通过以下方式选择它:

td