JQuery ошибка ?? Как получить первый «тд» во всех видимых строках - PullRequest
7 голосов
/ 08 мая 2009

У меня есть таблица, и я прячу некоторые строки. Я хочу получить первый тд во всех строках, которые отображаются. У меня есть следующее утверждение

$("table.SimpleTable tbody tr:visible td:first-child");

это работает в FireFox, но не в IE, есть идеи?

Ответы [ 4 ]

6 голосов
/ 08 мая 2009

Я запускаю код для события щелчка. HTML-код, который вы написали, в значительной степени заметен, но по неизвестной мне причине он не работает. Я нашел работу вокруг, хотя. (Я пытаюсь получить строку с разделителями-запятыми всех значений в первом тд для видимых строк). В любом случае, следующий обходной путь делает работу.

    var notfirst = false;
    var serials = "";
    var tds = $("table.SimpleTable tbody tr:visible td:first-child");
    for (var i = 0; i < tds.length; i++) {
        var td = $(tds[i]);
        if (td.is(":hidden"))
            continue;
        if (notfirst)
            serials += ",";
        else
            notfirst = true;

        serials += $.trim(td.text());
    }

По какой-то причине тег: hidden работает правильно, но не: visible в IE7

6 голосов
/ 08 мая 2009

Что должно работать. С HTML, который выглядит так:

<table class='SimpleTable'> 
  <tr style='display: none;'> 
    <td>test1</td> 
  </tr> 
  <tr> 
    <td>test2</td> 
  </tr> 
  <tr> 
    <td>test3</td> 
  </tr> 
  <tr style='display: none;'> 
    <td>test4</td> 
  </tr> 
  <tr> 
    <td>test5</td> 
  </tr> 
  <tr> 
    <td>test6</td> 
  </tr>   
</table>

Делаем это:

$("table.SimpleTable tbody tr:visible td:first-child").css('color','red');

Делает красный цвет в Firefox, IE7 для меня. Как выглядит ваш HTML?

Вот что я проверял выше на

РЕДАКТИРОВАТЬ : Мне очень странно, что вам нужно делать то, что вы делаете прямо сейчас. Вы должны быть в состоянии заменить то, что у вас есть сейчас, на это:

var serials = [];
$("table.SimpleTable tbody tr:visible td:first-child").each(function() {
    serials.push($.trim($(this).text()));
});
var serials = serials.join(',');

Если TD заполняются из селектора, они должны быть только видимыми. Если вы получаете скрытые TD в сериалы (что, я должен подчеркнуть, на самом деле не должно происходить и является ошибкой или признаком ошибки где-то), попробуйте этот селектор вместо этого:

$("table.SimpleTable tbody tr:not(:hidden) td:first-child")
3 голосов
/ 08 мая 2009

почему бы тебе не разделить это немного?

$("table.SimpleTable").find("tr:visible").find("td:first-child").text()

3 голосов
/ 08 мая 2009

Из документации:

"Как: видимое вычислено было изменено в jQuery 1.3.2. Элемент считается видимым, если оно и его родители занимают место в документе. Видимость CSS не учитывается счет. "

Может быть, это как-то связано с этим. Попробуйте использовать селектор класса или что-то вместо tr: visible

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...