Мое дерево DOM выглядит так:
<body>
<div>
**insert new p here**
<p></p>
</div>
</body>
Как мне добавить элемент в div, чтобы он всегда появлялся перед начальным элементом p и, следовательно, накладывался поверх последующих элементов p?
3 ответа
Если вы просто хотите, чтобы вставленный <p></p>
был первым дочерним элементом <div></div>
, вы можете использовать .prepend (). В вашем случае это будет выглядеть так:
<body>
<div id="paras">
<p>World</p>
</div>
<script src="path/to/jquery"></script>
<script type="text/javascript">
$('#paras').prepend('<p>Hello</p>');
</script>
</body>
Если на самом деле вы просто хотите поместить его выше этого <p></p>
и над ним будут другие элементы, вам следует использовать ответ Никэля.
Есть несколько вариантов, помимо уже перечисленных; для полноты (или насколько я могу понять):
JQuery:
Использование prepend()
:
// creates a new <p> element
var newElement = $('<p>', {
// sets its text to 'Hello'
// (internally using the text() method):
'text' : 'Hello'
});
// sets prepends the created-<p> to the
// elements matched by the selector:
$('div').prepend(newElement);
var newElement = $('<p>', {
'text': 'Hello'
});
$('div').prepend(newElement);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<!-- insert new p here -->
<p>
World
</p>
</div>
Использование prependTo()
:
$('<p>', {
'text' : 'Hello'
// prepending to the each <div> element:
}).prependTo('div');
$('<p>', {
'text': 'Hello'
}).prependTo('div');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<!-- insert new p here -->
<p>
World
</p>
</div>
Использование before()
:
var newElement = $('<p>', {
'text' : 'Hello'
});
// inserts the created-<p> before all elements
// matched by the selector:
$('p').before(newElement);
var newElement = $('<p>', {
'text': 'Hello'
});
$('p').before(newElement);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<!-- insert new p here -->
<p>
World
</p>
</div>
JavaScript:
Использование parentNode.insertBefore()
:
// creating a <p> element:
var newElement = document.createElement('p'),
// reference to the (first) <div> element in
// the document:
div = document.querySelector('div');
// setting the textContent of the created-<p>:
newElement.textContent = 'Hello';
// inserting the created-<p> element before the
// firstChild of the <div> element we found (above):
div.insertBefore(newElement, div.firstChild);
var newElement = document.createElement('p'),
div = document.querySelector('div');
newElement.textContent = 'Hello';
div.insertBefore(newElement, div.firstChild);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<!-- insert new p here -->
<p>
World
</p>
</div>
Использование Node.insertAdjacentHTML()
:
// finding the first <p> element in the document:
var p = document.querySelector('p');
// inserting the supplied HTML string before
// that found-<p> element,
// strings:
// 'beforebegin': before the element itself,
// 'afterbegin': before the first existing child-node,
// 'beforeend': after the last existing child-node,
// 'afterend': after the element itself:
p.insertAdjacentHTML('beforebegin', '<p>Hello</p>');
var p = document.querySelector('p');
p.insertAdjacentHTML('beforebegin', '<p>Hello</p>');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<!-- insert new p here -->
<p>
World
</p>
</div>
Снова используя Node.insertAdjacentHTML()
, но с 'afterbegin'
// finding the first <div> element in the document:
var div = document.querySelector('div');
// inserting the supplied HTML inside of the found <div>,
// before its existing content:
div.insertAdjacentHTML('afterbegin', '<p>Hello</p>');
var div = document.querySelector('div');
div.insertAdjacentHTML('afterbegin', '<p>Hello</p>');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<!-- insert new p here -->
<p>
World
</p>
</div>
Ссылки:
- JavaScript:
- jQuery:
В случае, если вы добавите новые <p>
теги, будет много тегов <p>
, поэтому я рекомендую вам присвоить ему идентификатор.
Например.:
<body>
<div>
**insert new p here**
<p id="main">
</p>
</div>
</body>
Тогда код будет:
$( "<p>something there</p>" ).insertBefore( "p#main" );
Похожие вопросы
Новые вопросы
jquery
jQuery — это библиотека JavaScript. Также рассмотрите возможность добавления тега JavaScript. jQuery — это популярная кросс-браузерная библиотека JavaScript, которая упрощает обход объектной модели документа (DOM), обработку событий, анимацию и взаимодействие AJAX, сводя к минимуму расхождения между браузерами. Вопрос с тегом jQuery должен быть связан с jQuery, поэтому jQuery должен использоваться рассматриваемым кодом, и в вопросе должны быть как минимум элементы, связанные с использованием jQuery.