Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.06.2020, 14:31
Аспирант
Отправить личное сообщение для win32s Посмотреть профиль Найти все сообщения от win32s
 
Регистрация: 28.09.2019
Сообщений: 38

Преобразовать JQ объект в обычный DOM
Здравствуйте
Тупой вопрос, но не могу сам справиться. Есть код, вида
$("#E1").click(function() .. и тут что-то происходит..


Мне нужно как-то получить значение - InnerText из элемента, расположенного чуть повыше. Написал такую конструкцию
var x = document.getElementById('E1');
console.log(x.parentElement.parentElement.parentElement.children[1].innerText);


Но проблема в том, что не хотелось бы делать двойную работу, можно ли как-то "преобразовать" $("E1") в переменную х, чтобы не вызывать дополнительно getElementById ? Или средствами Jquery получить этот текст (пробовал
$(this).parent().parent().parent().children()['1']
, почему-то не работает).

Я понимаю, что код ужасный, но уж какой есть.
Ответить с цитированием
  #2 (permalink)  
Старый 07.06.2020, 14:41
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

$("#E1").click(function() тут this, это #E1, а то что выше можно найти как closest(селектор)
Ответить с цитированием
  #3 (permalink)  
Старый 08.06.2020, 01:57
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 505

win32s, доступ по индексу и возвращает обычный DOM:

$(this).parent().parent().parent().children()[1].innerText

или
$(this).parent().parent().parent().children().eq(1).text()

или
this.parentElement.parentElement.parentElement.children[1].innerText
Ответить с цитированием
  #4 (permalink)  
Старый 08.06.2020, 02:06
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Белый шум, зачем же, если в обработчике this уже и возвращает ссылку на DOM элемент, да и зачем так много раз "проклинать предков".

this.closest("selector")
Ответить с цитированием
  #5 (permalink)  
Старый 08.06.2020, 02:37
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 505

laimas, про closest вы уже рассказали, я лишь немного дополнил ответ.
Ответить с цитированием
  #6 (permalink)  
Старый 08.06.2020, 20:03
Аспирант
Отправить личное сообщение для win32s Посмотреть профиль Найти все сообщения от win32s
 
Регистрация: 28.09.2019
Сообщений: 38

Спасибо, все работает.
Подскажите еще, в чем отличие $(this) и this в контексте jQuery? Или где можно почитать?
Ответить с цитированием
  #7 (permalink)  
Старый 08.06.2020, 20:13
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от win32s
$(this) и this в контексте jQuery?
$(this) - это JQ объект. Чтобы получить DOM, то либо методом .get(0), либо просто указав индекс, как выше писал Белый шум. Вот только бессмысленно так поступать, если требуется DOM объект, а не JQ, так как ссылка на него в обработчике всегда есть - this. Это как вместо того чтобы просто получить в обработчике значение this.value, делать это так $(this).val(). Правда есть отличие в этом - если определен $.valHooks, то $(this).val() вернет значение с удаленными крайними пробелами.

http://jquery.page2page.ru/index.php5/On
Ответить с цитированием
  #8 (permalink)  
Старый 08.06.2020, 20:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

win32s,
если грубо
просто this, это либо сам элемент или объект jQuery вида {0 : элемент};
$(this) это только объект jQuery {0 : элемент}
Ответить с цитированием
  #9 (permalink)  
Старый 08.06.2020, 20:42
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

win32s, в обработчике выполнить console.log(this, $(this)), это будет визуализация того, что рони написал.
Ответить с цитированием
  #10 (permalink)  
Старый 08.06.2020, 21:33
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 505

win32s,
this - это указатель на контекст функции, который jQuery в своих обработчиках всегда устанавливает на соответствующий DOM элемент.
Читать тут: https://api.jquery.com/Types/#Function

$( ) - стандартная функция jQuery, которая возвращает объект jQuery. Если ей передать в качестве параметра элемент DOM, то она вернёт не пустой объект jQuery, а с указателем на этот элемент. Примеры:
<head>
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script>
   console.log( *!* $(document) */!* );
   console.log( *!* $(window) */!* );
   console.log( *!* $(this) */!* );
   $(document).click(function(event){ console.log( *!* $(event.target) */!* ); })
</script>
</head><body><p>Кликни <span>тут...</span></p></body>
Читать тут: https://api.jquery.com/Types/#jQuery


Сообщение от рони
просто this, это ... или объект jQuery вида {0 : элемент};
Можно подробнее про это "или"? В каких случаях там будет объект jQuery?

Последний раз редактировалось Белый шум, 08.06.2020 в 21:59.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить что объект принадлежит к разделу нативного DOM объекта devote Оффтопик 11 21.06.2014 00:39
Как преобразовать объект в упорядоченный массив Shitbox2 Общие вопросы Javascript 15 09.06.2014 18:23
Является ли объект DOM объектом Hapson Events/DOM/Window 41 26.03.2014 00:11
Перевод на новую строку JS воспринимает как объект DOM Rig Events/DOM/Window 6 26.12.2011 20:08
Как преобразовать строку с тегами в DOM элимент GOll Общие вопросы Javascript 7 07.04.2010 10:39