Всем привет. Есть проект на vue с компонентами(.vue). А так же для верстки используется bootstrap(обычный которому нужен jquery, не bootstrap-vue)
Есть проблема. В одном из компонентов описывается таблица с классом .table-hover этот класс должен подсвечивать строку в таблице(tr при наведении) и как я понимаю это реализовано на jquery. все компоненты от vue а так же все js скрипты необходимые для работы bootstrap'а собираются в один общий js файл. И есть проблема. Т.к. таблица с классом .table-hover подгружается с помощью vue после загрузки страницы, то я столкнулся с проблемой, что класс .table-hover не обрабатывает наведение на строку в таблице. Хотя если попробовать эту же таблицу возвращать не из vue, а сразу вставить в php страницу, то все ок и класс .table-hover работает нормально. Подскажите пожалуйста можно ли как нибудь сделать так, что бы после того как vue вставляет таблицу на страницу, jquery заново вешал все свои обработчики событий на такие классы как например .table-hover. К сожалению проект уже большой и живет долго и перенести его на bootstrap-vue нет возможности
Подсветка строк в таблице определено в css
правиле bootstrap
и никакого отношения к jquery
не имеет:
.table-hover tbody tr:hover {
color: #212529;
background-color: rgba(0,0,0,.075);
}
Зачем тут промежуточный tbody
? Потому что теги tr
могут быть вложены в теги thead
и tfoot
.
Браузер при парсинге DOM вставляет tbody
, если тот не прописан явно. Если интересно, то смотрите спецификацию. По всей видимости, в таблицу, сгенерированную через javascript
браузер не вставляет тег tbody
и вышеприведенное правило css
не отрабатывает.
Наглядный пример, без подключения jquery
: вторая таблица находится в компоненте vuejs
.
// Отключим ненужные для примера
// сообщения в консоли.
Vue.config.productionTip = false
Vue.config.devtools = false
const App = {
template: `
<table class="table table-striped table-hover table-bordered thead-light" id="pay_table">
<tr><th>Имя</th><th>Покупка</th><th>Сумма</th><th></th></tr>
<tr>
<td><input type="text" class="form-control"></td>
<td><input type="text" class="form-control"></td>
<td><input type="text" class="form-control"></td>
<td><input type="button" class="btn btn-default" value="X" id="del_pay"></td>
</tr>
</table>`
}
const app = new Vue({
el: '#app',
components: {
App
},
template: `<app></app>`
})
<table class="table table-striped table-hover table-bordered thead-light" id="pay_table">
<tr><th>Имя</th><th>Покупка</th><th>Сумма</th><th></th></tr>
<tr>
<td><input type="text" class="form-control"></td>
<td><input type="text" class="form-control"></td>
<td><input type="text" class="form-control"></td>
<td><input type="button" class="btn btn-default" value="X" id="del_pay"></td>
</tr>
</table>
<div id="app" v-cloak></div>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css">
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.10"></script>
Очевидное решение: начать прописывать tbody
и считать его обязательным вложенным тегом в теге table
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Предварительно прошу прощения за примитивный вопрос, но я в тупике) Пытаюсь разобраться с Bootstrap 4 и сверстать примитивную карточку товаров,...
Вообщем, пишу я небольшой бот на puppeter который собирает информацию, и мне нужно переключить select на странице програмно, я его переключаю:
Есть 2 блока радиокнопок в формеПо умолчанию ни одна радиокнопка не выбрана, поэтому я решил чекнуть первый вариант в каждом блоке скриптом: