- Поиск по id
- Поиск по тегу
- Получить всех потомков
-
Поиск по
name
: getElementsByName - Другие способы
Стандарт 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*
возвращают список узлов.
В этой главе рассказывается, как найти и получить доступ к HTML элементам на HTML странице.
Поиск HTML элементов
Часто в JavaScript необходимо проводить определенные манипуляции с HTML элементами.
Чтобы это сделать, сначала нужно найти требуемый элемент. Найти HTML элемент можно несколькими способами:
- по идентификатору id
- по имени тега
- по имени класса
- по селекторам CSS
- по наборам объектов HTML
Поиск HTML элемента по идентификатору
Самый простой способ найти HTML элемент в DOM — это использовать его идентификатор id.
В следующем примере мы ищем элемент с id=»intro»:
var myElement = document.getElementById("intro");
Если элемент будет найден, то он будет возвращен в виде объекта (в переменную myElement).
Если элемент не будет найден, то в переменная myElement будет содержать значение null.
Поиск HTML элемента по имени тега
В следующем примере мы ищем все элементы <p>:
var x = document.getElementsByTagName("p");
В следующем примере сначала происходит поиск элемента с id=»main», а затем всех элементов <p> внутри «main»:
var x = document.getElementById("main");
var y = x.getElementsByTagName("p");
Поиск HTML элемента по имени класса
Если нужно найти все HTML элементы с одним и тем же именем класса, то используют метод getElementsByClassName().
В следующем примере возвращается список всех элементов с атрибутом class=»intro»:
var x = document.getElementsByClassName("intro");
Внимание! Поиск элементов по имени класса не работает в Internet Explorer 8 и более ранних версиях.
Поиск HTML элемента по CSS селекторам
Если нужно найти все HTML элементы, подходящие по заданному CSS селектору (id, имена классов, типы, атрибуты, значения атрибутов и т.п.), используется метод querySelectorAll().
В следующем примере возвращается список всех элементов <p> с атрибутом class=»intro»:
var x = document.querySelectorAll("p.intro");
Внимание! Метод querySelectorAll() не работает в Internet Explorer 8 и более ранних версиях.
Поиск HTML элемента по наборам HTML объектов
В следующем примере производится поиск элемента формы с атрибутом id=»frm1″ в наборе объектов forms, и отображаются все значения элементов:
var x = document.forms["frm1"];
var text = "";
var i;
for (i = 0; i < x.length; i++) {
text += x.elements[i].value + "<br>";
}
document.getElementById("demo").innerHTML = text;
Также доступны следующие HTML объекты (и наборы объектов):
- document.anchors
- document.body
- document.documentElement
- document.embeds
- document.forms
- document.head
- document.images
- document.links
- document.scripts
- document.title
30.06.11 — 12:07
Есть идентификатор вида : 209:971a0018f34e121411e03c1de5b80387
Хочу найти что за объект в базе ему соответствует. Как?
1 — 30.06.11 — 12:09
А где ты его берешь?
2 — 30.06.11 — 12:09
шерстить каждый объект отдельно
3 — 30.06.11 — 12:10
209 — идентификатор типа, остальное — перемиксованный объект УникальныйИдентификатор
4 — 30.06.11 — 12:10
(1) Да после обмена делаю ТИИ оно говорит:
Проверка логической целостности. Последовательность.Взаиморасчеты <Объект не найден> (209:971a0018f34e121411e03c1de5b80387)
Неверная ссылка на регистратор.
5 — 30.06.11 — 12:10
НовыйGUID = Новый УникальныйИдентификатор(ТвойГуид);
СсылкаГУИД=Документы.ВидДок.ПолучитьСсылку(НовыйGUID);
6 — 30.06.11 — 12:11
(4)Если <Объект не найден> , то с чего ты взял, что ты его найдешь если база не нашла?
7 — 30.06.11 — 12:11
(5) щас попробую
8 — 30.06.11 — 12:12
(6) Ну я же на копии, у меня есть и оригинал, где обмен не запускал …
9 — 30.06.11 — 12:12
(5) читай ветку
(4) блииин. сделай запрос по регистру «Взаиморасчеты» примерно такой
Выбрать
Взаиморасчеты.Регистратор
Из
РегистрНакопления.Взаиморасчеты
Где
Взаиморасчеты.Регистратор.Номер Есть NULL
получишь твою ссылку. потом по ней отбор набора записей и запись пустого набора
10 — 30.06.11 — 12:13
ну а вообще — после обмена — это нормально, если криво правила настроены, или не криво, но это заложено в логику
11 — 30.06.11 — 12:14
(9)<Объект не найден> <> NULL
12 — 30.06.11 — 12:14
+ Ссылка не пустая. Она битая
13 — 30.06.11 — 12:15
(10) Самое прикольное, что это стандартный обмен БП 2.0 по организации. Там постоянно вылезают такие бяки
14 — 30.06.11 — 12:16
Выбрать Регистратор Из Последовательность.Взаиморасчеты где Регистратор.Ссылка есть NULL
Но что ты в базе собрался искать, если проблема как раз в том, что в базе его нет?
15 — 30.06.11 — 12:16
(11) я там не зря написал «.Номер»
16 — 30.06.11 — 12:18
(11) А не является ли «.Номер» неявным левым соединением?
Варианты ответа:
1) да, является.
2) нет, является.
17 — 30.06.11 — 12:19
(11) и кстати, да:
NULL <> NULL
18 — 30.06.11 — 12:20
раз объект не найден, то нет его нигде. Если база SQL, восстанавливай бекап, ищи в SQL таблицах средствами SQL, по таблице и поймешь что за объект
19 — 30.06.11 — 12:21
(18) в копии он может и оказаться, почему же нигде?
20 — 30.06.11 — 12:22
(18) Ащета запрос из (9) дает тебе готовую ссылку. У которой даже и тип имеется. Для зачем что-то по таблицам SQL искать?
21 — 30.06.11 — 12:23
+(19) В том и дело, что он где-то есть: либо в базе до обмена, либо в узле откуда обмен принимали …
Вот и хочу найти что это было и почему объект удалился, а из последовательности не изьялся …
22 — 30.06.11 — 12:24
(20) В запросе (9) обращаемся к регистру накопления, но ТИИ не нашла в нем ссылок на несуществующие объекты …
23 — 30.06.11 — 12:24
(20) Не увидел 4 сообщение. Думал вообще ничего не известно, кроме гуида
24 — 30.06.11 — 12:25
(22) ну удали из последовательности
25 — 30.06.11 — 12:41
(22) Ну, ять, в (14) Посмотри. БОЛЬШАЯ разница, ага…
26 — 30.06.11 — 12:45
(25) Да разница-то небольшая, только что там в последовательности-то найдешь? Ну найдешь битые записи, а что за объект был все равно не известно …
27 — 30.06.11 — 12:53
ПЦ
28 — 30.06.11 — 13:23
(26) рукалицо…
29 — 30.06.11 — 13:30
(17) (NULL IS NULL) = TRUE
30 — 30.06.11 — 13:51
ТЗ = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого Строка Из ТЗ Цикл
Если Не ЗначениеЗаполнено(Строка.ИмяТаблицы) Тогда Продолжить; КонецЕсли;
ПозТочки = Найти(Строка.ИмяТаблицыХранения, «.»);
Если ПозТочки > 0 Тогда
Продолжить;
ИмяТаблицы = Лев(Строка.ИмяТаблицыХранения, ПозТочки — 1);
КонецЕсли;
ИтоговоеЧисло = «»;
Для Сч = 1 По СтрДлина(Строка.ИмяТаблицыХранения) Цикл
Символ = Сред(Строка.ИмяТаблицыХранения, Сч, 1);
Если Найти(«0123456789», Символ) > 0 Тогда
ИтоговоеЧисло = ИтоговоеЧисло + Символ;
КонецЕсли;
КонецЦикла;
Если ИтоговоеЧисло = «209» Тогда
Сообщить(Строка.ИмяТаблицы);
КонецЕсли;
КонецЦикла;
31 — 30.06.11 — 13:53
(30) А что *это* делает?
32 — 30.06.11 — 13:58
(30) поможет узнать имя объекта по типу 209..
33 — 30.06.11 — 14:01
(31) это запустить в базе где отсутствует
(30)+
потом в базе источнике запустить
Поз = Найти(СтрокаОбъекта, «:»);
Тип = Лев(СтрокаОбъекта, Поз — 1);
СтрокаУИД = Сред(СтрокаОбъекта, Поз + 1);
СтрокаУИД = Сред(СтрокаУИД, 24, + «-» + Сред(СтрокаУИД, 20, 4) + «-» + Сред(СтрокаУИД, 16, 4) + «-» + Сред(СтрокаУИД, 1, 4) + «-» + Сред(СтрокаУИД, 5, 12);
Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаУИД));
справочники.номенклатура. заменить на имятипа что покажет в обработке
34 — 30.06.11 — 14:01
(32) см (14)
35 — 30.06.11 — 14:03
(34) и что это покажет? что «объект не найден <209:971a0018f34e121411e03c1de5b80387>»?? а как понять что за объект конкретно?
36 — 30.06.11 — 14:06
(35) ссылка будет на конкретный объект метаданных
37 — 30.06.11 — 14:06
(35) рукалицо…
Запрос = Новый Запрос;
Запрос.Текст = "Выбрать РАЗЛИЧНЫЕ Регистратор Из Последовательность.Взаиморасчеты где Регистратор.Ссылка есть NULL";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(ТипЗнч(Выборка.Регистратор));
КонецЦикла;
38 — 30.06.11 — 14:06
хоть и отсутствующий
Axel2009
39 — 30.06.11 — 14:13
(37) был не прав.
&НаСервере
Функция ПодключитьБазуНаСервере(Соединение = "")
Объект.ФайловаяБазаДанных=Ложь;
Объект.Сервер="srv1с";
Объект.База="buh";
Объект.ИмяПользователя="Obmen";
Объект.Пароль="1qaz";
// Подключение к 1С
Если Объект.ФайловаяБазаДанных Тогда
СтрокаПодключения = "file='" + Объект.ПутьКБазе + "'; usr='" + Объект.ИмяПользователя + "'; pwd='" + Объект.Пароль + "';";
Иначе
СтрокаПодключения = "srvr='" + Объект.Сервер + "'; ref='" + Объект.База + "'; usr='" + Объект.ИмяПользователя + "'; pwd='" + Объект.Пароль + "';";
КонецЕсли;
Попытка
V8 = Новый COMObject("V83.COMConnector");
Соединение = V8.Connect(СтрокаПодключения);
ЕстьСоединение = Истина;
Исключение
ЕстьСоединение = Ложь;
Сообщить(ОписаниеОшибки());
КонецПопытки;
Возврат Соединение;
КонецФункции
&НаСервере
Процедура ОбновитьДанныеПлатежейНаСервере()
Соединение = ПодключитьБазуНаСервере();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа.Ссылка КАК Ссылка,
|ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа.ОснованиеПлатежа КАК ОснованиеПлатежа,
|ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа.Сумма КАК Сумма
|ИЗ
|Документ.ПоступлениеБезналичныхДенежныхСредств.РасшифровкаПлатежа КАК ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа
|ГДЕ
|НЕ ПоступлениеБезналичныхДенежныхСредствРасшифровкаПлатежа.ОснованиеПлатежа ССЫЛКА Документ.ЗаказКлиента";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
УИД = ВыборкаДетальныеЗаписи.Ссылка.УникальныйИдентификатор();
СсылкаНаДок = Соединение.Документы.ПоступлениеНаРасчетныйСчет.ПолучитьСсылку(Соединение.NewObject("УникальныйИдентификатор",Строка(УИД)));
//Сообщить(СсылкаНаДок.Номер);
Для каждого СтрокаИсточник Из СсылкаНаДок.РасшифровкаПлатежа Цикл
//Сообщить("Счет: "+Строка(СтрокаИсточник.СчетНаОплату.Номер));
УИД = Соединение.String(СтрокаИсточник.СчетНаОплату.УникальныйИдентификатор());
текДок= Документы.ЗаказКлиента.ПолучитьСсылку(Новый УникальныйИдентификатор(УИД));
Если ЗначениеЗаполнено(текДок) Тогда
Сообщить(текДок);
текОбъект=ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
текОбъект.РасшифровкаПлатежа[0].ОснованиеПлатежа= текДок;
текОбъект.РасшифровкаПлатежа[0].Заказ= текДок;
текОбъект.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьДанныеПлатежей(Команда)
ОбновитьДанныеПлатежейНаСервере();
КонецПроцедуры
Пример поиска:
ГУИД = "4b9c2fa7-3824-11ea-ab9e-38d547def818";
ОбъектСсылка = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(ГУИД));
сообщить(ОбъектСсылка);
если объект не найден:
<Объект не найден> (206:ab9e38d547def81811ea38244b9c2fa7)
если объект найден (наименование объекта):
Желтый НМ 0,05кг
Рубрики
- Все
- CRM
- Битрикс24
- Frameworks
- Laravel
- Bootstrap 4
- React Native
- CMS
- OpenCart 3
- WordPress
- Функции
- Авторские функции
- 1С-Битрикс
- MODX
- АТС
- Asterisk
- OS
- Linux
- Fedora
- Linux Mint
- Manjaro
- Rocky Linux
- CentOS
- Debian
- Ubuntu
- Windows
- macOS
- Linux
- Контейнеризация
- Docker
- Программирование
- 1C
- Javascript
- Node JS
- PHP
- Python
- Android Studio
- Web
- Библиотеки
- Базы данных
- MySQL
- 1С
- Плагины DW
- WordPress
- Редакторы и IDE
- PHPStorm
- VS Code
- Sublime Text 3
- Notepad++
- Софт
- Blockchain
Свежие комментарии
Пн | Вт | Ср | Чт | Пт | Сб | Вс |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |