Как добавить в существующий?
у меня есть код, который выглядит так:
<div id="header">
<ul class="tabs">
<li><a href="/user/view"><span class="tab">Profile</span></a></li>
<li><a href="/user/edit"><span class="tab">Edit</span></a></li>
</ul>
</div>
Я хотел бы использовать jQuery, чтобы добавить в список следующее:
<li><a href="/user/messages"><span class="tab">Message Center</span></a></li>
Я попытался это:
$("#content ul li:last").append("<li><a href="/user/messages"><span class="tab">Message Center</span></a></li>");
но это добавляет новый li
внутри последние li
(перед закрывающим тегом), а не после него. Каков наилучший способ добавить это li
?
12 ответов:
это сделает это:
$("#header ul").append('<li><a href="/user/messages"><span class="tab">Message Center</span></a></li>');
две вещи:
- вы можете просто добавить
<li>
до<ul>
сам по себе.- вы должны использовать другой тип кавычек, чем то, что вы используете в HTML. Поэтому, поскольку вы используете двойные кавычки в своих атрибутах, окружите код одинарными кавычками.
вы можете сделать это также более "объектным способом" и по-прежнему легко читать:
$('#content ul').append( $('<li>').append( $('<a>').attr('href','/user/messages').append( $('<span>').attr('class', 'tab').append("Message center") )));
тогда вам не нужно бороться с кавычками, но вы должны отслеживать фигурные скобки :)
Как насчет использования "после "вместо"добавить".
$("#content ul li:last").after('<li><a href="/user/messages"><span class="tab">Message Center</span></a></li>');
".после () " можно вставить содержимое, указанное параметром, после каждого элемента в наборе сопоставленных элементов.
Если вы просто добавляете текст в
li
, вы можете использовать:$("#ul").append($("<li>").text("Some Text."));
jQuery поставляется со следующими опциями, которые могут удовлетворить ваши потребности в этом случае:
append
используется для добавления элемента в конец родителяdiv
, указанный в селекторе:$('ul.tabs').append('<li>An element</li>');
prepend
используется для добавления элемента в начало/начало родительскогоdiv
, указанный в селекторе:$('ul.tabs').prepend('<li>An element</li>');
insertAfter
позволяет вставить элемент вашего выбора после указанного элемента. Ваш созданный элемент будет помещен в DOM после указанного тега закрытия селектора:$('<li>An element</li>').insertAfter('ul.tabs>li:last'); will result in: <li><a href="/user/edit"><span class="tab">Edit</span></a></li> <li>An element</li>
insertBefore
будет делать противоположное вышесказанному:$('<li>An element</li>').insertBefore('ul.tabs>li:last'); will result in: <li>An element</li> <li><a href="/user/edit"><span class="tab">Edit</span></a></li>
вы должны добавить в контейнер, а не последний элемент:
$("#content ul").append('<li><a href="/user/messages"><span class="tab">Message Center</span></a></li>');
на добавить() функция, вероятно, должна была быть вызвана добавить() в jQuery, потому что это иногда путает людей. Вы могли бы подумать, что он добавляет что-то после данного элемента, в то время как на самом деле добавляет это к элементу.
$("#content ul").append('<li><a href="/user/messages"><span class="tab">Message Center</span></a></li>');
$("#content ul").append('<li><a href="/user/messages"><span class="tab">Message Center</span></a></li>');
вот некоторые отзывы о читаемости кода (бесстыдный плагин для блога). http://coderob.wordpress.com/2012/02/02/code-readability
рассмотрите возможность отделения объявления ваших новых элементов от действия добавления их в ваш UL.. Это будет выглядеть примерно так:
var tabSpan = $('<span/>', { html: 'Message Center' }); var messageCenterAnchor = $('<a/>', { href='/user/messages', html: tabSpan }); var newListItem = $('<li/>', { html: messageCenterAnchor, "id": "myIDGoesHere" }); // NOTE: you have to put quotes around "id" for IE.. $("content ul").append(newListItem);
удачи в кодировании :)