#javascript #jquery #asp.net #repeater
#javascript #jquery #asp.net #repeater
Вопрос:
У меня есть repeater, и я просто хочу, чтобы при выборе или щелчке по любой его строке она выделялась. Я попробовал некоторый код javascript, который выделяет выбранную строку, но не отключает подсветку при выборе любой другой строки.Мой код:-
<tr id="gh" style="cursor: pointer" onclick="Select(this);">
любой код javascript и style является:-
<style type="text/css">
.highlight
{
background-color: Red;
}
.selected
{
background-color: #ffdc87;
}
</style>
<script type="text/javascript">
function Select(obj) {
obj.className = 'selected';
var tbl = document.getElementById("Repaddressorbbl")
var firstRow = tbl.getElementsByTagName("TR")[0];
var tableRowId = tbl.rows[firstRow.getElementById("gh").parentNode.id];
alert(tableRowId);
var oldRow = tbl.rows[firstRow.getElementsByTagName("tr")[0].value];
if (oldRow != null) {
oldRow.className = '';
}
firstRow.getElementsByTagName("tr")[0].value = obj.rowIndex;
}
</script>
Мы можем сделать это просто с помощью встроенного кода, но дело в том, что это должно быть сделано только с помощью jquery или javascript.
Ответ №1:
Вы можете использовать код, подобный этому:
var INDEX = $(this).parent().children().index($(this));
$('#Repaddressorbbl tr:nth-child(' INDEX ')').addClass("highlight")
.siblings()
.removeClass("highlight"); // remove css class from other rows
Он получает номер строки TR и добавляет класс CSS, удаляя тот же класс из всех других TR.
Комментарии:
1. Зачем вам нужен индекс? Разве вы не можете просто сказать,
$(this).addClass("highlight").siblings().removeClass("highlight");
и еслиthis
этоtr
, вы можете получить индекс напрямую без jQuery, сказавthis.rowIndex
. (Кстати, вопрос не был помечен jQuery.)2. Вы правы, вам действительно не нужен индекс. И хотя вопрос не был помечен соответствующим образом, это обеспечивает простое решение рассматриваемой проблемы, поэтому операционная система может захотеть его использовать или не знает о возможностях jQuery.
3. Что ж, похоже, это сработало: вопрос был обновлен, чтобы включить jQuery. Я надеюсь, вы не возражаете, но я соответствующим образом обновил свой ответ.
Ответ №2:
я добавил функцию для выбора элементов с определенным classname, чтобы вы могли легко искать в dom элементы с этим классом
onload=function(){
if (document.getElementsByClassName == undefined) {
document.getElementsByClassName = function(className)
{
var hasClassName = new RegExp("(?:^|\s)" className "(?:$|\s)");
var allElements = document.getElementsByTagName("*");
var results = [];
var element;
for (var i = 0; (element = allElements[i]) != null; i ) {
var elementClass = element.className;
if (elementClass amp;amp; elementClass.indexOf(className) != -1 amp;amp; hasClassName.test(elementClass))
results.push(element);
}
return results;
}
}
}
function Select(obj) {
var oldRow = document.getElementsByClassName('selected');
if(oldRow.length > 0)
oldRow[0].className = '';
obj.className = 'selected';
}
Ответ №3:
Обновление для jQuery:
$(document).ready(function() {
$("tr").click(function() {
$(this).addClass("highlight").siblings().removeClass("highlight");
}
}
Оригинальный ответ:
Если я вас правильно понял, все строки вашей таблицы определены следующим образом:
<tr id="gh" style="cursor: pointer" onclick="Select(this);">
И вы хотите установить класс для самой последней выбранной строки, чтобы она выглядела выделенной, очистив указанный класс от ранее выбранной строки?
Если да, то это должна сделать значительно упрощенная версия вашей функции:
var selectedRow = null;
function Select(obj) {
if (obj != selectedRow) {
if (selectedRow != null) {
selectedRow.className = '';
}
obj.className = 'selected';
selectedRow = obj;
}
}
Я не понимаю, что вы пытаетесь сделать с firstRow.getElementsByTagName("tr")
материалом. У вас есть вложенные таблицы?
Комментарии:
1. на самом деле есть количество таблиц, видимых условно. Сэр, ваш код не работает, выбирая каждую строку, на которую я нажимаю. но не удаление класса..
2. Хорошо, извините, но, возможно, вы могли бы прояснить в своем вопросе, что существует несколько таблиц. Являются ли таблицы вложенными? Пожалуйста, покажите еще немного html. Вы хотите, чтобы у каждой таблицы была своя, независимая подсветка? Если это так, то моя версия jQuery уже должна это делать. Если вы хотите выделить только в одной таблице, измените селектор «tr» на «#id_of_table tr». Что касается версии, отличной от jQuery, я не собираюсь предлагать ее изменение, пока не пойму, как вы хотите, чтобы несколько таблиц работали.