IE 6 JQuery Selector - PullRequest
       8

IE 6 JQuery Selector

0 голосов
/ 08 июля 2010

У меня есть простой HTML-макет, например, так:

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

Я пытаюсь выбрать первый тд с помощью селектора, как это:

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

К сожалению, это не похожеработает и выдает ошибку «неопределенный объект», когда я оборачиваю его в блок try catch.

Кто-нибудь видел это раньше?

Eef

Ответы [ 5 ]

3 голосов
/ 08 июля 2010

Вам не нужно начинать с "html". Подумайте об этом: как это делает его лучше, чем просто начинать с «тела»? Я не думаю, что вам нужна эта специфичность родитель-ребенок. Могу поспорить, что:

$('table td:first')

должно быть все, что вам нужно.

2 голосов
/ 08 июля 2010

"выберите первый тд" - $('td:first') или $('td').first().

См. Документы для : первый селектор и .first () для более подробной информации.

1 голос
/ 08 июля 2010

tr не находится прямо внутри table, хотя это выглядит так из вашей разметки. Каждая строка помещается внутри элемента thead, tbody или tfoot, и если вы пропустите начальный тег <tbody>, браузер вставит его для вас без вывода сообщений. Таким образом, чтобы выбрать строку, вы должны сказать:

table>tbody>tr

Это связано с причудой разбора HTML, когда во многих случаях разрешено пропускать стартовые теги (например, если вы опустите <body>, браузер предположит, что он был там в первый раз, когда встречается с содержимым страницы) .

Тем не менее, XHTML имеет более регулярные правила синтаксического анализа, и в результате этого, если страница анализируется в режиме XML, не будет подразумеваться tbody. Поэтому сложнее написать селектор, который будет совпадать в обоих случаях.

Кроме того, селектор nth является нестандартным расширением jQuery для селекторов, что приведет к тому, что медленный селекторный движок JavaScript «Sizzle» будет использоваться вместо быстрого встроенного в браузер селекторного движка (если он есть, т.е. IE6-7). Старайтесь придерживаться стандартных селекторов CSS, чтобы избежать этого.

Лучше всего избегать обеих проблем, используя обход в стиле DOM вместо селекторов, чтобы получить нужный элемент. Сам DOM предлагает списки rows и cells для таблиц и строк, что, вероятно, проще, чем все, что предлагает 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 голосов
/ 08 июля 2010

большая часть вашего селектора бесполезна. Попробуйте:

$("td:first > a");

Он выберет a потомка первого td в документе.

Если у вас больше таблиц, вы можете добавить этот идентификатор, а затем выбрать его:

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

1011 *

0 голосов
/ 08 июля 2010

Я полагаю, что вам нужно будет изменить этот селектор на следующие:как это.

...