Javascript: Как изменить получить и изменить атрибуты дочерних элементов БЕЗ использования getElementById

0

Я пытаюсь изменить цвет щелкнутых строк динамически сгенерированного списка значений с помощью Javascript. Проблема в том, что все строки имеют одинаковый атрибут класса (tr.odd или tr.even, "even" или "odd", чтобы сделать некоторую css-разницу между строками...), и я не хочу использовать идентификаторы. Таким образом, чтобы изменить цвет щелкнутых ссылок, я решил получить любой из атрибутов элемента (THIS) tr и обновить (добавить к нему) значение типа "щелкнуть". Например, я имею в атрибуте title каждый раз другой serialNr, и я могу добавить к нему "clicked" как tag, он будет выглядеть, например, ex. "LG 1234 нажал". И я не получаю этого. Я получаю все элементы tr, которые берут этот тег сейчас, так что после того, как я нажимаю на строку, каждый раз на "mouseleave" другой строки, хотя она не была нажата, она меняет его цвет синий, поскольку он был нажат, и я думаю, что эта проблема связана с тегом "clicked", который добавляется к атрибуту "title" для всех элементов tr, а не специально для тех, которые мне нужны/я нажал.

Вот код сценария:

$(document).on("mouseenter", ".filter-table tbody tr", function() {
        $(this).css("background", "#21374C");
        $(this).css("color", "#DFDFDF");
    }); 

$(document).on("click", ".filter-table tbody tr", function() {
        var element = document.getElementsByTagName("tr")[0].setAttribute("title", "clicked");
        $(this).css("color", "blue");
        $(this).css("background", "#DFDFDF");
        console.log("attribute title is: " + element.getAttribute("title"));
    });

$(document).on("mouseleave", ".filter-table tbody tr.odd", function() {
        var element = document.getElementsByTagName("tr")[0];
         if (element.getAttribute("title") == "clicked") {
            $(this).css("color", "blue");
            $(this).css("background", "#DFDFDF");   
        }
        else { 
            $(this).css("background", "#DFDFDF");
            $(this).css("color", "#222222");
        }

    });

    $(document).on("mouseleave", ".filter-table tbody tr.even", function() {
        var element = document.getElementsByTagName("tr")[0];
        if (element.getAttribute("title") == "clicked") {
            $(this).css("color", "blue");
            $(this).css("background", "#DFDFDF");   
        }
        else {
            $(this).css("background", "#FFFFFF");
            $(this).css("color", "#222222");
        }
    });

Пример HTML здесь:

<tr wicket:id="content-list" class="even" style="background-color: rgb(255, 255, 255); color: rgb(34, 34, 34); background-position: initial initial; background-repeat: initial initial;">
     <td wicket:id="cells" title="SNr: 1"><span wicket:id="cell">1</span></td>
     <td wicket:id="cells" title="DC-MAN: AGR"><span wicket:id="cell">AGR</span></td>
     <td wicket:id="cells" title="DC-FOA: SS - MH"><span wicket:id="cell">SS - MH</span></td>
     <td wicket:id="cells" title="DC-SC: ABCDEFGH"><span wicket:id="cell">ABCDEFGH</span></td>
</tr>

<tr wicket:id="content-list" class="odd" style="background-color: rgb(255, 255, 255); color: rgb(34, 34, 34); background-position: initial initial; background-repeat: initial initial;">
     <td wicket:id="cells" title="SNr: 2"><span wicket:id="cell">2</span></td>
     <td wicket:id="cells" title="DC-MAN: PPT"><span wicket:id="cell">PPT</span></td>
     <td wicket:id="cells" title="DC-FOA: DB - OP"><span wicket:id="cell">DB - OP</span></td>
     <td wicket:id="cells" title="DC-SC: MNBVCXY"><span wicket:id="cell">MNBVCXY</span></td>
</tr>

<tr wicket:id="content-list" class="even" style="background-color: rgb(255, 255, 255); color: rgb(34, 34, 34); background-position: initial initial; background-repeat: initial initial;">
     <td wicket:id="cells" title="SNr: 3"><span wicket:id="cell">3</span></td>
     <td wicket:id="cells" title="DC-MAN: QWE"><span wicket:id="cell">QWE</span></td>
     <td wicket:id="cells" title="DC-FOA: AS - HG"><span wicket:id="cell">AS - HG</span></td>
     <td wicket:id="cells" title="DC-SC: LKJHGF"><span wicket:id="cell">LKJHGF</span></td>
</tr>
  • 0
    Вы хотите изменить цвет только после нажатия или также при наведении курсора мыши и оставить ??
  • 0
    при нажатии, наведении курсора и при оставлении вернитесь к старым цветам, если не щелкнули, и к синему, если щелкнули. но при наведении я не скопировал здесь сценарий, он работает нормально .. я должен добавить его?
Показать ещё 7 комментариев
Теги:

2 ответа

1

вы уже подали в суд на JQuery Selector, так почему бы не использовать его здесь?

например:

 var element = $("#idName")[0].setAttribute("title", "clicked");

или

var element = $(".className")[0].setAttribute("title", "clicked");

br из paulq

  • 0
    потому что все строки имеют одинаковое имя класса: либо «нечетный», либо «четный», но содержимое элементов и атрибутов td отличается, как вы можете видеть в коде ... и у меня есть тысячи строк ..
0

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

$('td').click(function(){
   $(this).parent().removeClass('hover').addClass('click'); 
}).mouseenter(function(){
    $(this).parent().addClass('hover');
}).mouseleave(function(){
    $(this).parent().removeClass('hover click');
});

DEMO

Конечно, я не прошел весь ваш код. Вам нужно будет изменить другие изменения, которые вы хотите применить в своем css, я просто покажу вам путь. Удачи!

  • 0
    и "hover", "click" и "hover click" - это классы CSS или что?
  • 0
    @KarimBelkhiria ты смотрел демо?
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню