jQuery замена атрибута класса css для всех ячеек таблицы в строке

#jquery

#jquery

Вопрос:

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

Вот пример текущего html для строк / ячеек следующим образом.

     <tr id="rowid-1234">
        <td class="tblistred">20-400 Silver  Metal Closure</td>
        <td class="tblistred">Tecno, LLC</td>                          
        <td class="tblistred">Closure</td>
        <td class="tblistred">New Item</td>
    </tr>
  

Вот мой скрипт:

     var rowId = "#rowid-"   response.id;
    $(rowId).each(function (index) {
        $(this).children('td').addClass('tblist');
    });
  

Обновить
Хорошо, я изменил его на этот, но он по-прежнему не устанавливает класс.

    alert($(rowId).find("td:first-child").text());
   $(rowId).children('td').addClass('tblist');
  

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

РЕШЕНИЕ Мне пришлось удалить класс, который уже был там

   $(rowId   ' td').removeClass('tblistred').addClass('tblist');
  

Комментарии:

1. Такого рода ошибки должны быть обнаружены с подсветкой синтаксиса. Блокнот не является хорошим редактором исходного кода.

2. @Chad Или в предварительном просмотре кода в StackOverflow…

3. Я использую Visual Studio, но это объявление переменной, которое я добавил, было просто введено, когда я опубликовал свой вопрос. Я отредактировал вопрос.

4. Когда вы говорите «это не работает», вы уверены, что класс не применяется к вашим td s? Возможно, CSS просто не выполняет то, что вы ожидаете.

5. Нет, я проверил класс в td после запуска скрипта. Я должен указать, что класс уже установлен для td, и я пытаюсь его изменить. Возможно, addClass не заменяет существующий класс?

Ответ №1:

Как показывает подсветка кода, у вас не совпадающие кавычки:

 var rowID = '#row-'   response.id; // <-- see matching single quotes
  

Кроме того, у вас должен быть только один элемент с заданным значением id , поэтому вызывать each его на самом деле не имеет смысла. Если у вас есть несколько одинаковых элементов id , это может быть еще одной причиной сбоя. Если нет, вы можете просто сделать $(rowId).children('td').addClass('tblist');

Комментарии:

1. Я попробовал это, $(rowId).children(‘td’).addClass(‘tblist’);, но это не сработало. Смотрите мои обновления к моему вопросу.

Ответ №2:

Как насчет:

 $(rowID   ' td').addClass('tblist');
  

Комментарии:

1. Это было предложено @Doozer Blake. Я пробовал, но это тоже не сработало.

Ответ №3:

Вероятно, вы могли бы сделать это с помощью просто:

 $('#row-"   response.Id   " td").addClass('tblist');
  

Ответ №4:

Мне пришлось удалить существующий класс из td перед добавлением класса.

Я нашел ответ здесь.

Вот что у меня получилось.

     $(rowId   ' td').removeClass('tblistred').addClass('tblist');
  

Комментарии:

1. На самом деле, ваш вопрос был неточным: вы не только пытались добавить класс к ячейкам. Вы хотели удалить один и заменить его новым. Я рад, что это сработало 🙂

2. Да, это было. Я проголосовал за все ответы, поскольку они были правильными для вопроса, который я задал. Тем не менее, я хотел создать ответ, чтобы другие, оказавшиеся здесь, могли четко видеть решение.

3. Хорошо, но, пожалуйста, также обновите свой вопрос и ответ, поскольку часть вопроса раскрывается только в вашем ответе…