Как найти блок элемента

Последнее обновление Сен 22, 2021

При создании сайтов а именно при написании скриптов веб разработчики часто сталкиваются с необходимостью найти определенный текст, а если быть точнее то найти блок с определенным текстом. В данном примере мы разберем как именно можно найти блок с текстом и произвести с ним определенные манипуляции.

Задача

Необходимо найти блок с текстом “featured”и удалить span блок который следует за родительским элементом нашего блока (с текстом). Затем удалить сам блок с текстом.

JS готовый скрипт

    jQuery(document).ready(function($){
        $('span.tg-cats-holder').each(function(){
            $(this).find('span.tg-item-term:contains("featured")').closest('a.product_visibility').next('span:contains(",")').remove();
            $(this).find('span.tg-item-term:contains("featured")').closest('a.product_visibility').remove();
        });
    });

Описание логики скрипта

Для решения данной задачи перебираем каждый (ну в данном примере я так решил) родительский блок в котором находятся все наши блоки с которыми необходимо произвести все манипуляции – в моем примере это блок “span.tg-cats-holder”. Перебор мы производим при помощи .each.

$('span.tg-cats-holder').each(function(){

Далее в функции ищем наш блок с текстом, за содержащийся в блоке текст отвечает:

После того как блок с текстом был найден переходим к родительскому блоку при помощи .closest:

.closest('a.product_visibility')

После перехода, находим находящийся рядом с родительским блоком span содержащий “|” и удаляем его:

.next('span:contains("|")').remove();

Далее, при помощи .remove() происходит удаление и самого блока.

Пример на CodePen.io

Источник записи:

<tbody><tr>
									<td colspan="7" class="hide-tr name-pnd">ПК1</td>
								</tr><tr>
									<td colspan="7" class="hide-tr search-click">РАЗДЕЛ</td>
								</tr><tr>
									<td>ТЕКСТ</td>
								</tr><tr>
									<td>ТЕКСТ ДЛЯ НАЖАТИЯ</td>
								</tr></tbody>

Мне нужно найти tr в котором есть блок с классом name-pnd. Этот блок находится ДО блока по которому происходит нажатие.
$(this).parent().prev().find('.name-pnd').text()
Так он проверяет только ближайший блок tr, а мне нужно что бы грубо говоря он проверил все tr которые находятся «перед» и подцепил ближайший. Как это сделать

let’s say I have a markup like this:

<div id="foo">
  ...
  <span id="moo">
    ...
  </span>
  ...
</div>

and I want to select #moo.

why $('#foo').find('span') works, but $('span', $('#foo')); doesn’t ?

Pranay Rana's user avatar

Pranay Rana

174k35 gold badges237 silver badges263 bronze badges

asked Apr 27, 2011 at 18:13

Alex's user avatar

3

You can use any one these [starting from the fastest]

$("#moo") > $("#foo #moo") > $("div#foo span#moo") > $("#foo span") > $("#foo > #moo")

Take a look

answered Apr 27, 2011 at 18:50

Jishnu A P's user avatar

Jishnu A PJishnu A P

14.2k8 gold badges40 silver badges50 bronze badges

0

Actually, $(‘#id’, this); would select #id at any descendant level, not just the immediate child. Try this instead:

$(this).children('#id');

or

$("#foo > #moo")

or

$("#foo > span")

answered Apr 27, 2011 at 18:15

Pranay Rana's user avatar

Pranay RanaPranay Rana

174k35 gold badges237 silver badges263 bronze badges

2

You can use find option to select an element inside another. For example, to find an element with id txtName in a particular div, you can use like

var name = $('#div1').find('#txtName').val();

answered Dec 4, 2017 at 13:13

Sai Kalyan Kumar Akshinthala's user avatar

Why not just use:

$("#foo span")

or

$("#foo > span")

$('span', $('#foo')); works fine on my machine ;)

answered Apr 27, 2011 at 18:19

hunter's user avatar

hunterhunter

62.1k19 gold badges113 silver badges113 bronze badges

1

Have a look here — to query a sub-element of an element:

$(document.getElementById('parentid')).find('div#' + divID + ' span.child');

Matthieu Charbonnier's user avatar

answered Jul 7, 2014 at 16:46

Cody's user avatar

CodyCody

9,6954 gold badges60 silver badges46 bronze badges

….but $(‘span’, $(‘#foo’)); doesn’t work?

This method is called as providing selector context.

In this you provide a second argument to the jQuery selector. It can be any css object string just like you would pass for direct selecting or a jQuery element.

eg.

$("span",".cont1").css("background", '#F00');

The above line will select all spans within the container having the class named cont1.

DEMO

answered Aug 24, 2018 at 23:29

Mohd Abdul Mujib's user avatar

Mohd Abdul MujibMohd Abdul Mujib

12.9k8 gold badges62 silver badges88 bronze badges

1

Поиск элементов

Чтобы скрипт мог работать с каким-то элементом страницы, нужно сначала найти этот элемент.
Для этого в JavaScript есть несколько способов. Найденный элемент
обычно записывается в переменную.
Через эту переменную сркипт обращается к элементу и производит с ним какие-то действия.

Поиск по id

Если элементу задан атрибут id, то элемент можно найти по id. Это
самый простой способ. Поиск элемента производится с помощью метода
getElementById() глобального объекта document.

document.getElementById (id)

Параметры:

id — id элемента, который нужно найти. id — это строка, поэтому она
должна быть в кавычках.

Создадим страницу, добавим на неё элемент и зададим ему id. В
скрипте найдём этот элемент:

HTML код:

+

8

<div id="block">Блок с id</div>

JavaScript:

10
11

let block = document.getElementById('block');
console.log(block);

Найденный элемент мы присвоили переменной block и вывели переменную в консоль. Откройте консоль браузера,
в ней должен быть указан элемент.

Так как посик по id — это самый простой и удобный способ, часто используют именно его. Если с каким-то
элементом нужно работать в скрипте, то в коде страницы этому элементу устанавливают атрибут
id, даже если он не был установлен ранее. И находят элемент по id.

Поиск по классу

Метод getElementsByClassName() позволяет найти все элементы, относящиеся к
определённому классу.

document.getElementsByClassName (класс)

Параметры:

класс — класс элементов, которые нужно найти

Метод возвращает псевдомассив, содержащий найденные элементы. Псевдомассивом он называется потому, что
для него не работают многие методы массивов. Но главное свойство остаётся — можно обратиться к любому
элементу массива. Даже если найден только один элемент, он всё равно находится в массиве.

Добавим на страницу элементы и зададим им класс. Часть элементов разместим внутри блока, который мы
создали ранее. Другую часть создадим вне блока. Смысл этого будет понятен чуть позднее. Теперь страница
будет выглядеть так:

HTML код:

8
9
10
11
12

<div id="block">Блок с id
  <p class="art">Абзац в блоке</p>
  <p class="art">Ещё один абзац в блоке</p>
</div>
<p class="art">Отдельный абзац</p>

JavaScript:

16
17
18

let art = document.getElementsByClassName('art');
console.log(art);
console.log(art[0]);

В строке 17 мы вывели в консоль весь массив, чтобы посмотреть, сколько в нём элементов, а в строке 18
мы обратились к конкретному элементу.

Любой метод, рассматриваемый в данной теме, можно применить не только ко всему документу,
но и к конкретному элементу. Например, к блоку, который есть на нашей странице. При этом будут найдены
не все элементы, а только те, которые находятся внутри блока. Найдём элементы класса
art, находящиеся в блоке:

19
20

let artIn = block.getElementsByClassName('art');
console.log(artIn);

Теперь найдены только те элементы, которые расположены в блоке.

Поиск по тэгу

Метод getElementsByTagName() находит все элементы с конкретным тэгом.
Он также возвращает псевдомассив с найденными элементами.

document.getElementsByTagName (тэг)

Параметры:

тэг — тэг элементов, которые нужно найти

Найдём все тэги p, которые есть на странице:

21
22

let p = document.getElementsByTagName('p');
console.log(p);

Этот метод можно также применять не ко всему документу, а к конкретному элементу. Найдите все тэги
p, находящиеся в блоке.

Поиск по селектору

Методы querySelector() и
querySelectorAll() находят
элементы, соответсвующие определённому
селектору.

Метод querySelectorAll() находит все элементы, соответствующие
селектору. А метод querySelector() находит только
первый элемент. Эти методы могут заменить все способы поиска
элементов, рассмотренные ранее.
Ведь есть селектор по id, селектор по тэгу и многие другие.

document.querySelector (селектор)

document.querySelectorAll (селектор)

Селекторы пишутся точно так же, как в CSS, только не забывайте ставить кавычки.

Добавим на страницу список и найдём его по селектору. Мы ищем только один элемент и мы точно знаем, что
он будет первый, потому что он один на странице. Поэтому в данном случае удобнее использовать метод
querySelector(). Но при использовании этого метода нужно учитывать, что в
дальнейшем на страницу могут быть добавлены такие же элементы. Впрочем, это касается большинства методов.

HTML код:

13
14
15
16

<ul>
<li>Первый пункт</li>
<li>Второй пункт</li>
</ul>

JavaScript:

27
28

let element = document.querySelector('ul');
console.log(element);

Теперь найдём не сам список, а его пункты. Для поиска элементов можно использовать любые селекторы.
Мы используем составной селектор:

29
30

let li = document.querySelectorAll('ul li');
console.log(li);

Данные методы также могут производить поиск не во всём документе, а внутри конеретного элемента.

В примере мы использовали только селекторы по тэгу. Попробуйте найти элементы страницы с использованием
других селекторов.

Соседние элементы

Для найденного элемента можно найти соседей. Каждый элемент является объектом, и соседние элементы можно
получить через свойства этого объекта. Свойство previousElementSibling
содержит предыдущий элемент, а свойство
nextElementSibling содержит следующий элемент.

элемент.previousElementSibling

элемент.nextElementSibling

Найдём элемент, следующий за блоком:

31
32

let blockPre = block.nextElementSibling;
console.log(blockPre);

Свойства previousSibling и nextSibling
тоже содержат соседей, но они учитывают не только элементы, но и другие узлы.

Перед первым абзацем идёт текст
«Блок с id». Найдём этот текстовый узел. Абзац содержится в нескольких псевдомассивах, созданных нами
в примерах, в том числе, в массиве art. Обратимся к нему через этот массив:

33
34

let text = art[0].previousSibling;
console.log(text);

Дочерние элементы

Свойство children содержит массив с дочерними элементами.

элемент.children

Найдём дочерние элементы блока:

35
36

let blockIn = block.children;
console.log(blockIn);

Свойство childNodes содержит не только элементы, но и другие узлы. Найдём
все узлы, которые находятся в блоке:

37
38

let blockAll = block.childNodes;
console.log(blockAll);
  1. Поиск по id
  2. Поиск по тегу
  3. Получить всех потомков
  4. Поиск по name: getElementsByName
  5. Другие способы

Стандарт DOM предусматривает несколько средств поиска элемента. Это методы getElementById, getElementsByTagName и getElementsByName.

Более мощные способы поиска предлагают javascript-библиотеки.

Поиск по id

Самый удобный способ найти элемент в DOM — это получить его по id. Для этого используется вызов document.getElementById(id)

Например, следующий код изменит цвет текста на голубой в div‘е c id="dataKeeper":

document.getElementById('dataKeeper').style.color = 'blue'

Поиск по тегу

Следующий способ — это получить все элементы с определенным тегом, и среди них искать нужный. Для этого служит document.getElementsByTagName(tag). Она возвращает массив из элементов, имеющих такой тег.

Например, можно получить второй элемент(нумерация в массиве идет с нуля) с тэгом li:

document.getElementsByTagName('LI')[1]

Что интересно, getElementsByTagName можно вызывать не только для document, но и вообще для любого элемента, у которого есть тег (не текстового).

При этом будут найдены только те объекты, которые находятся под этим элементом.

Например, следующий вызов получает список элементов LI, находящихся внутри первого тега div:

document.getElementsByTagName('DIV')[0].getElementsByTagName('LI')

Получить всех потомков

Вызов elem.getElementsByTagName('*') вернет список из всех детей узла elem в порядке их обхода.

Например, на таком DOM:

<div id="d1">
  <ol id="ol1">
    <li id="li1">1</li>
    <li id="li2">2</li>
  </ol>
</div>

Такой код:

var div = document.getElementById('d1')
var elems = div.getElementsByTagName('*')

for(var i=0; i<elems.length; i++) alert(elems[i].id)

Выведет последовательность: ol1, li1, li2.

Поиск по name: getElementsByName

Метод document.getElementsByName(name) возвращает все элементы, у которых имя (атрибут name) равно данному.

Он работает только с теми элементами, для которых в спецификации явно предусмотрен атрибут name: это form, input, a, select, textarea и ряд других, более редких.

Метод document.getElementsByName не будет работать с остальными элементами типа div,p и т.п.

Другие способы

Существуют и другие способы поиска по DOM: XPath, cssQuery и т.п. Как правило, они реализуются javascript-библиотеками для расширения стандартных возможностей браузеров.

Также есть метод getElementsByClassName для поиска элементов по классу, но он совсем не работает в IE, поэтому в чистом виде им никто не пользуется.

Частая опечатка связана с отсутствием буквы s в названии метода getElementById, в то время как в других методах эта буква есть: getElementsByName.

Правило здесь простое: один элемент — Element, много — Elements. Все методы *Elements* возвращают список узлов.

Понравилась статья? Поделить с друзьями:
  • Как найти кладку перегородок
  • Как найти сумму бесконечной геом прогрессии
  • Как составить формулу для окрашивания волос
  • Как составить пропорцию белки жиры углеводы
  • Как бади нашел свой вид