2013-07-05 4 views
0

У меня есть табличный дизайн, который я использую для нескольких таблиц. Будут некоторые цветовые различия, но они определяются на основе классов. например:javascript - нечетное/четное разбиение таблицы - несколько таблиц на одной странице

<table id="table" class="table1"> and <table id="table" class="table2"> 

Я хочу применить Javascript чередованием для нечетных строк; однако, хотите, чтобы он работал на всех таблицах с идентификатором table, потому что на некоторых страницах будет несколько таблиц с одинаковым идентификатором (только разные классы).

Я смотрел на этот код,

$(document).ready(function(){ 
$("#table tr:odd").addClass("odd"); 
}); 

Но это, кажется, работает только на первом столе и останавливается после этого. На днях я видел код, который работал; однако теперь я не могу найти его. Любые предложения по javascript-коду, которые будут работать в нескольких таблицах, получая нечетные строки из каждой таблицы отдельно и применяя класс к этим строкам?

Если я не сделал это правильно, сообщите мне, и я попытаюсь исправить. И я не использую nth-child CSS для этого, потому что nth-child CSS не работает в IE (по крайней мере, мне не удалось заставить его работать). Мне нужен этот сайт для работы даже в старых браузерах, поэтому я возвращаюсь к JS. Мне также нужно, чтобы JS работал во всех браузерах.

+0

ids уникальны. получение элементов по id вернет только первый. Вместо этого вам нужно будет использовать класс. – kalley

+0

Я изменил это, чтобы добавить класс, но не начинал подсчет для каждой таблицы отдельно. Мне не нужно, чтобы он продолжал отсчет с того момента, когда он остановился. Http: //jsbin.com/ucadiq/2 (мне нужно, чтобы таблица 2 была первой) --- код доступен здесь: http://jsbin.com/ucadiq/2/edit – kdjernigan

ответ

2

Изменить это: -

$("#table tr:odd").addClass("odd"); 

к

$("table tr:odd").addClass("odd"); 

Вы также можете попробовать это: -

$(document).ready(function() { 
    $("table").find("TR:odd").addClass("odd"); 
}); 

JS FIDDLE

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

+0

2-е решение идеально. У меня есть вопрос, хотя, похоже, вы сказали ему найти TR: odd; однако его поиск строк 2 и 4 (которые по числу четные). Я несколько новичок в javascript, и мне любопытно, почему они находят эти строки вместо строк 1 и 3. Это может быть глупый вопрос – kdjernigan

+2

Это потому, что он использует массив, основанный на 0, в строках, возвращаемых селектором. Итак, первая строка - это «0-й» элемент массива. , , 0, будучи четным, становится помеченным как «четное», несмотря на то, что он является первым элементом в массиве (т. Е. Технически «нечетным»). – talemyn

+0

@talemyn +1 Очень хорошо объяснено. Но есть ли у вас ссылка на документацию, содержащую этот контент. Я не мог найти его в JQUERY API DOCUMENTATION. Спасибо :) –

2

Если вы используете селектор ID #<whatever>, тогда он вернет только первый элемент, который соответствует. вы могли бы использовать $("table tr:odd") или придумать класс, чтобы назначить все ваши таблицы, которые показывают, что должно иметь альтернативные строки окраски, как $(".table-striped tr:odd")

альтернатив

этих примеры будут работать по нескольким таблицам и сохранить порядок окраски то же самое

$('.table-striped').each(function() { 
    $('tr:odd', this).addClass('odd'); 
}); 

$(".table-striped tr:nth-child(odd)").addClass("odd"); 
+0

, поэтому идентификатор может быть назначен только для первого вхождения, но классы могут быть назначены нескольким вхождениям на одной странице? Я прошу только уточнить, так что я буду знать для будущего кодирования – kdjernigan

+1

да. вам нужно только присвоить идентификатор одному элементу, он однозначно идентифицирует этот элемент. класс должен использоваться всякий раз, когда вы пытаетесь идентифицировать несколько элементов. –

+0

Я изменил это, чтобы добавить класс, но не начинал подсчет для каждой таблицы отдельно. Мне он не нужен, чтобы продолжить подсчет с того момента, когда он остановился. Http: //jsbin.com/ucadiq/2 (мне нужно, чтобы таблица 2 выглядела идентичной первой) --- код доступен здесь: http://jsbin.com/ucadiq/2/edit – kdjernigan

1

«Ну, у вас есть фундаментальный недостаток в таком подходе, в том, что id значения должны быть уникальными на странице. Таким образом, вы действительно не должны сделать id атрибут общую„вещь“на основе сценария на.

Хорошей новостью является то, что вы можете пропустить с помощью идентификатора и сделать это на основе самого тега ... $("table tr:odd").addClass("odd"); применит класс к нечетным строкам каждого элемента <table> на странице.

+0

Я изменил это, чтобы добавить класс, но его не начинать отсчет для каждой таблицы отдельно. Мне он не нужен, чтобы продолжить подсчет с того момента, когда он остановился. Http: //jsbin.com/ucadiq/2 (мне нужно, чтобы таблица 2 выглядела идентичной первой) --- код доступен здесь: http://jsbin.com/ucadiq/2/edit – kdjernigan

+0

Хех. , , да, это интересный (непредвиденный мной) побочный эффект JQuery, который я использовал для решения. Селектор получает все строки из всех таблиц и фильтрует «нечетные» из этой группы. С помощью '$ (" table "). Find (" tr: odd ").addClass («нечетное»); «решение, в которое входит Vivek, вы сначала выбираете все таблицы, а затем просматриваете каждую таблицу и получаете все строки только для этой таблицы и фильтруете« нечетные ». По-видимому, это не полезно для того, что вам нужно, но хороший совет «поведения», чтобы отложить его, если вам это нужно позже. :) – talemyn

1

Вы получили ID и класса перепутаны

<table id="table" class="table1"> 

Должно быть

<table id="table1" class="table"> 

и

<table id="table" class="table2"> 

Должно быть

<table id="table2" class="table"> 

Ваш JS должен быть:

$(document).ready(function(){ 
    $(".table tr:odd").addClass("odd"); 
}); 

Идентификатор должен быть уникальным и применять только один раз, он используется для идентификации конкретного элемента. Отсюда и название «ID».

Класс используется для поиска нескольких элементов.

Смежные вопросы