#jquery #html #css
#jquery #HTML #css
Вопрос:
У меня есть следующий HTML-код
<p><img src="src.jpg" clas="left" title="image title text"></p>
И следующий jQuery
$( document ).ready(function() {
$('img').each(function() {
var t = $(this).attr('title'),
c = $(this).attr('class'),
w = $(this).width();
$(this).before('<div class="caption ' c '">');
$(this).after(t '</div>');
});
});
Однако результат, который это дает мне, выглядит следующим образом
<p><div class="caption left"></div>
<img src="src.jpg" clas="left" title="image title text">
image title text</p>
Я ни за что в жизни не смогу понять, почему открытие и закрытие DIV происходит раньше, когда я указываю закрывающий тег в разделе .after. Бьюсь об заклад, это супер базовый, но я просто не вижу его. Любая помощь приветствуется.
Приветствия.
Комментарии:
1. Вероятно, вам будет проще просто вставить в
$(this).parent()
, а не (неправильно) использовать.before()
и.after()
Ответ №1:
Вы можете добавлять в документ только элементы, а не теги. Когда HTML-код для страницы анализируется, начальный и конечный теги в конечном итоге становятся объектом с одним элементом в DOM.
Когда вы пытаетесь добавить начальный тег, браузер добавит конечный тег, чтобы завершить его. Когда вы пытаетесь завершить конечный тег, он будет просто проигнорирован. (По крайней мере, в используемом вами браузере. Поведение может отличаться для других браузеров.)
Чтобы обернуть один элемент вокруг другого, используйте wrap
метод или wrapAll
method:
$(this).wrapAll('<div class="caption ' c '"></div>').after(t);
Демонстрация: http://jsfiddle.net/JR4j3 /
Комментарии:
1. Спасибо loads, это было невероятно полезно и имеет большой смысл теперь, когда я неправильно использовал эти теги. Теперь работает отлично! Просто нужно отсортировать стили.
Ответ №2:
Вы не можете открыть div, не закрыв его.
Или правильный способ сказать это: вы не можете открыть элемент с помощью before
(или любого другого оператора добавления), не закрыв его с помощью той же операции.
Таким образом, это означает, что у вас не может быть .before('<div>')
и после этого .after('</div>')
.
Для этого вы можете использовать wrap.
Ответ №3:
Именно так это и работает. Вы вставляете недопустимый HTML-код перед элементом, используя функцию .before() . Элемент div без закрывающего тега недопустим, и браузер автоматически добавит закрывающий тег, чтобы попытаться устранить проблему.
Вместо использования .before() и .after(), взгляните на метод .wrap() .