Как я могу выделить строку таблицы с помощью прототипа?

Как я могу использовать библиотеку Prototype и создать ненавязчивый javascript для внедрения событий onmouseover и onmouseout в каждую строку вместо того, чтобы помещать javascript в каждый тег строки таблицы?

Ответ с использованием библиотеки прототипов (вместо mootools, jQuery и т. д.) Был бы наиболее полезным.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
10
0
10 538
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Вы можете использовать методы addClassName и removeClassName от Prototype.

Создайте CSS-класс "hilight", который вы примените к <tr> с подсветкой. Затем запустите этот код при загрузке страницы:

var rows = $$('tbody tr');  
for (var i = 0; i < rows.length; i++) {  
    rows[i].onmouseover = function() { $(this).addClassName('hilight'); }  
    rows[i].onmouseout = function() { $(this).removeClassName('hilight'); }  
}
Ответ принят как подходящий

<table id = "mytable">
    <tbody>
        <tr><td>Foo</td><td>Bar</td></tr>
        <tr><td>Bork</td><td>Bork</td></tr>

    </tbody>
</table>

<script type = "text/javascript">

$$('#mytable tr').each(function(item) {
    item.observe('mouseover', function() {
        item.setStyle({ backgroundColor: '#ddd' });
    });
    item.observe('mouseout', function() {
        item.setStyle({backgroundColor: '#fff' });
    });
});
</script>

Очень круто. Я не знал, что вы можете делать такие вещи, как $$ ('# mytable tr'). Это делает мою жизнь намного проще.

Mark Biek 09.09.2008 20:09

Код @swilliams лучше моего примера, но я думаю, вам следует использовать addClassName (), а не явно устанавливать стиль в JS.

pix0r 09.09.2008 20:11

@Mark Biek, есть куча таких помощников, как $ F и $ A. См. Страницу утилиты: объекты prototypejs.org/api/utility и Enumerable очень эффективны: prototypejs.org/api/enumerable

swilliams 09.09.2008 20:14

Вы можете сделать что-нибудь с каждой строкой, например:

$('tableId').getElementsBySelector('tr').each(function (row) {
  ...
});

Итак, в теле этой функции у вас есть доступ к каждой строке, поочередно, в переменной 'row'. Затем вы можете вызвать Event.observe (row, ...)

Итак, что-то вроде этого может сработать:

$('tableId').getElementsBySelector('tr').each(function (row) {
  Event.observe(row, 'mouseover', function () {...do hightlight code...});
});

Я немного изменил код @swilliams.

$$('#thetable tr:not(#headRow)').each(

Это позволяет мне иметь таблицу со строкой заголовка, выделенной не.

<tr id = "headRow">
    <th>Header 1</th>
</tr>

Исходя из этого, я правильно предполагаю, что могу выбрать все строки, если классифицирую их с помощью выделяемый и вызывая $$ ('. Highlightable'). Each ()?

Jason Navarrete 09.09.2008 21:01

Будет ли работать что-то вроде $$ ('# thetable not (the)')? Я обычно использую ЭТО

Lucas Jones 25.01.2009 18:08

Немного общее решение:

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

tr:hover { background: red; }

К сожалению, более старые версии IE не поддерживают селектор: hover для элементов, отличных от A. Поэтому мы должны использовать JavaScript.

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

CSS

table.highlightable tr.highlight { background: red; }

JavaScript (с использованием прототипа)

// when document loads
document.observe( 'dom:loaded', function() {
    // find all rows in highlightable table
    $$( 'table.highlightable tr' ).each( function( row ) {
        // add/remove class "highlight" when mouse enters/leaves
        row.observe( 'mouseover', function( evt ) { evt.element().addClassName( 'highlight' ) } );
        row.observe( 'mouseout', function( evt ) { evt.element().removeClassName( 'highlight' ) } );
    } );
} )

HTML

Все, что вам нужно сделать, это добавить класс «выделяемый» к любой таблице, которую вы хотите:

<table class = "highlightable">
    ...
</table>

tr: hover работает в IE 7, если вы используете: <! DOCTYPE HTML PUBLIC "- // W3C // DTD HTML 4.01 // EN" "w3.org/TR/html4/strict.dtd">

bartosz.r 06.10.2011 14:02

Я нашел интересное решение для фона строк, выделения строк при наведении курсора мыши без JS. Вот связь

Работает во всех браузерах. Для IE6 / 7/8 ...

tr{ position: relative; }
td{ background-image: none } 

А для Safari я использую отрицательную позицию фона для каждого TD.

Другие вопросы по теме