У меня есть множество таблиц с кликабельными строками, как показано ниже:
$('.clickable-tbody tr').click(function () {
var value = $(this).find('td:first').text().replace(/\s/g, '');
var url = "/Link?ID=" + value;
$(location).attr('href', url);
})
К сожалению, в нескольких таблицах есть некоторые тд с кнопками, поэтому мне нужен способ исключить их из области, по которой можно кликать (в идеале с другим классом), чтобы кнопка могла нажиматься и не срабатывать для слушателей. Так:
<tbody class="clickable-tbody">
<tr>
<td> //All of these need to have a href listener as in the jquery
</td>
<td class="no-click">
<button></button> //I want the button to fire, and not the href
</td>
<td>
</td>
Я не могу найти хороший способ исключить их.
Я посмотрел:
Слушатель jQuery, исключая ребенка
Но у меня нет независимого класса от других td (слишком много, чтобы хотеть сделать это).
В идеале я хочу что-то вроде: $ ('. Clickable-tbody tr'), кроме $ (td .no-click)
Я понимаю, что область кликабельности в настоящее время представляет собой целую строку, но мои попытки разбить ее на каждый тд не увенчались успехом (тогда не удалось выполнить тд: сначала)
Обновление (спасибо ниже):
Я думаю, что мне нужно что-то вроде ниже, но атрибут location все еще применяется к строке таблицы и поэтому не исключает ячейку с классом no-click
$('.clickable-tbody tr').click(function () {
var value = $(this).find('td:first').text().replace(/\s/g, '');
$(this).find('td').each(function () {
if (!$(this).hasClass('no-click')) {
var url = "/Link?ID=" + value;
$(location).attr('href', url);
}
})
})
3 ответа
Вы можете просто исключить строки с помощью : не
$('.clickable-tbody td:not(.no-click)').click(function() {
var $firstCellOfRow = $(this).closest("tr").find("td:first");
console.log("Click fired: " + $firstCellOfRow.text());
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tbody class="clickable-tbody">
<tr>
<td>
Cell 1
</td>
<td class="no-click">
<button>Cell 2</button>
</td>
<td>
Cell 3
</td>
</tbody>
</table>
$('.clickable-tbody tr').each(function () {
$(this).find('td').each(function () {
if ($(this).hasClass('no-click')) {
$(this).find('button').attr('disabled', true)
}
})
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script>
<table>
<tbody class="clickable-tbody">
<tr>
<td>
<button>Click</button>
</td>
<td class="no-click">
<button>Click</button>
</td>
<td>
<button>Click</button>
</td>
<td class="no-click">
<button>Click</button>
</td>
</tr>
<table>
Используйте hasClass()
, чтобы найти if td no-click
$('.clickable-tbody td').click(function(e){
if(!$(this).hasClass('no-click'))
console.log('clicked')
})
.no-click
{
border:1px solid red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script>
<table>
<tbody class="clickable-tbody">
<tr>
<td>
<button>Click</button>
</td>
<td class="no-click">
<button>Click</button>
</td>
<td>
<button>Click</button>
</td>
<td class="no-click">
<button>Click</button>
</td>
</tr>
<table>
Похожие вопросы
Связанные вопросы
Новые вопросы
jquery
jQuery - это библиотека JavaScript, рассмотрите возможность добавления тега JavaScript. jQuery - это популярная кросс-браузерная библиотека JavaScript, которая облегчает прохождение Document Object Model (DOM), обработку событий, анимацию и взаимодействие AJAX, сводя к минимуму расхождения между браузерами. Вопрос с тегом jQuery должен быть связан с jQuery, поэтому jQuery должен использоваться в рассматриваемом коде, и в вопросе должны быть как минимум элементы, связанные с использованием jQuery.