#javascript #jquery #ecmascript-6
#javascript #jquery #ecmascript-6
Вопрос:
У меня есть элемент следующего типа ниже на моей веб-странице HTML.
<div class="form-group>
<div class="car">
<div class="carIventory carDescription" contenteditable="true">This is car # 1</div>
</div>
<div class="tool">
<button>Select me!</button>
</div>
</div>
Их много в зависимости от того, сколько автомобилей отображается одновременно.
Когда я нажимаю кнопку Select me!
, я использую closest()
и find()
получаю ближайший <div>
с классом carDescription
.
Запись его в консоль с помощью этого кода:
var $element = $(e.target).closest('.form-group').find('.carDescription');
console.log("carDescription ", $element);
выдает это:
jQuery.fn.init [div.carIventory.carDescription, prevObject: jQuery.fn.init(1)]
Но если я использую этот код вместо:
const $element = document.querySelector('.carDescription');
console.log("carDescription ", $element);
Я получаю нужный формат:
<div class="carIventory carDescription" contenteditable="true">This is car # 1</div>
Есть ли способ использовать closest()
и find()
возвращать фактический элемент HTML, как querySelector()
это делает?
Спасибо!
Комментарии:
1. Вы можете видеть в jQuery, что первый элемент в массиве является вашим элементом DOM, поэтому вы можете просто использовать
$element[0]
2. В вашем коде jquery есть
$element
представление этого элемента в jquery, поэтому вы получаете jquery.nf.init out . Вы можете либо использовать jquery, напримерconsole.log("carDescription ", $element.text());
, либо преобразовать его в узел DOM, используя$element[0]
что-то вродеconsole.log("carDescription ", $element[0].innerHTML);
— лично я бы придерживался jquery (отсюда и «что-то вроде»)3. @freedomn-m спасибо!
text()
показывает мне содержимое<div>
, подобное этому:This is car # 1
. Но он не показывает мне фактические элементы HTML, такие как формат, который мне нужен выше.4. Зачем использовать jQuery, если вам нужен DOM?
5. Тогда
$lement[0].outerHTML
?
Ответ №1:
Вы видите консоль, показывающую элемент DOM. В зависимости от отладчика браузера они выводят разные вещи. В вашем случае вы видите объект jQuery, а не ссылку на DOM.
Если вы хотите использовать DOM, который вы используете .get(0)
, или [0]
ссылаться на элемент DOM из объекта, подобного массиву jQuery.
var $element = $(e.target).closest('.form-group').find('.carDescription');
console.log("carDescription ", $element.get(0));
console.log("carDescription ", $element[0]);
Или просто используйте современные методы DOM и пропустите jQuery все вместе.
var element = document.querySelector(e.target).closest(".form-group").querySelector('.carDescription');
console.log(element);
Комментарии:
1. Спасибо! Второй вариант действительно сработал. Я не знал, что вы можете комбинировать
querySelector()
иclosest()
тому подобное.
Ответ №2:
Используйте так
var $element = $(e.target).closest('.form-group').find('.carDescription');
console.log("carDescription ", $element.parent().html());
Это даст вывод HTML.
Комментарии:
1. Это не то же самое, что querySelector ….. Строка не является элементом DOM….