Есть вот такой блок для перелистывания "страниц" таблицы. Когда их очень много.
<div id="pages">
<div class="ui grid">
<div class="three wide column">
<div class="ui small right labeled input fluid">
<input type="text">
<div class="ui basic label">из 125</div>
</div>
</div>
<div class="column">
<div class="ui small basic icon buttons">
<button class="ui button">
<i class="arrow left icon"></i>
</button>
<button class="ui button">
<i class="arrow right icon"></i>
</button>
</div>
</div>
</div>
</div>
Пытаюсь сделать его повторно используемым. В метод для настройки событий кнопок и поля ввода, передаю id и функцию события. И тут начинаются странности:
$("#pages")
- находит элемент
var node = $("#pages");
node.find("input");
не находит элемент
var node = $("#pages");
node.find("button.ui.button").has("i.arrow.left.icon");
не находит элемент
UPD
По поводу динамики, вот что забыл упомянуть: <div id="pages">
- это vue объект, у него есть условие, если кол-во страниц больше 10ти, показывать в качестве содержимого <div class="ui grid">
, если меньше - другое. И самое странное, в блоке v-if поиск работает, а в v-else - нет.
Метод по привязке событий к кнопкам вызывается так, чтобы учитывать внесенные изменения:
vuePages.$nextTick(function(){initInput(jqSelector, event);});
При этом получить input из $("#pages") на чистом js получилось без проблем
Вот делаю лог просто на вашем коде, и все находит так как нужно.
Возможно что вы просто не сохранили найденные элементы в какой нибудь переменной.
$(document).ready(function(){
var node = $("#pages");
var tmp = node.find("input");
console.log(tmp);
tmp = node.find("button.ui.button").has("i.arrow.left.icon");
console.log(tmp);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="pages">
<div class="ui grid">
<div class="three wide column">
<div class="ui small right labeled input fluid">
<input type="text">
<div class="ui basic label">из 125</div>
</div>
</div>
<div class="column">
<div class="ui small basic icon buttons">
<button class="ui button">
<i class="arrow left icon"></i>
</button>
<button class="ui button">
<i class="arrow right icon"></i>
</button>
</div>
</div>
</div>
</div>
$(function(){
console.log("First:");
var node = $("#pages");
console.log(node.find("button.ui.button").has("i.arrow.left.icon").length);
console.log("Second:");
console.log($("#pages").find("button.ui.button").has("i.arrow.left.icon").length);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="pages">
<div class="ui grid">
<div class="three wide column">
<div class="ui small right labeled input fluid">
<input type="text">
<div class="ui basic label">из 125</div>
</div>
</div>
<div class="column">
<div class="ui small basic icon buttons">
<button class="ui button">
<i class="arrow left icon"></i>
</button>
<button class="ui button">
<i class="arrow right icon"></i>
</button>
</div>
</div>
</div>
</div>
Если просто смотреть на статический код, то все работает, как видите на примере.
Скорее всего ваша страница динамически что-то заменяет, дорисовывает или модифицирует что-то, и вы в динамическом DOM уже не находите элементы, который видели в статическом стартовом варианте кода.
Используйте любой отладчик, есть во всех современных браузерах, F12 по умолчанию, и посмотрите на элементы Инспектором. Он покажет именно динамическое состояние.
Вот пример отрисовки региона на google map, есть ли в гугл апи метод чтобы районы сами так обрисовывались вместо того чтобы самому рисовать?
всем привет, на сайте поставил плагин https://githubcom/Prinzhorn/skrollr но он на телефоне работает просто ужасно
С помощью JSF выводится элемент SelectManyMenu, источник заполнения - ArrayList, каждому стрингу в БД соответствует булевый флагТребуется, при заполнении...