2015-06-17 3 views
0

У меня есть следующий РОМ:добавить элемент перед другим с JQuery

<div class="test">1</div> 
<div class="test">2</div> 
<div class="test">3</div> 
<div class="test">4</div> 

Я хотел бы добавить до п-го испытательного элемента нового элемента.

Я могу добавить новый элемент для всех испытываемого элемента с этим кодом:

var newElement = "div class=\"test-new\""; 
$(".test").before(newElement); 

Но я не могу выбрать только нужный элемент, благодаря индексу (пример: 3), эти 2 коды выдает ошибку:

var newElement = "div class=\"test-new\""; 
$(".test")(3).before(newElement); 
$(".test")[3].before(newElement); 

ответ

1

использование insertBefore:

$('<div />').addClass('test-new').insertBefore('.test'); 

Чтобы вставить элемент перед тем н-й элемент использование eq:

$('<div />').addClass('test-new').insertBefore($('.test').eq(0)); 
// Insert before first .test element 

$('<div />').addClass('test-new').insertBefore($('.test').eq(3)); 
// Insert before third .test element 

Индекс eq начинается с нулевой .

Уменьшить набор согласованных элементов до единицы по указанному индексу.

0

Да, вы не можете использовать синтаксис массива напрямую. Вы можете сделать somethig так:

$($(".test").get(3)).before(newElement); 

Пожалуйста, обратите внимание на двойную доллар «$ ($ (» это необходимо, так как результат получаем() это DOM элемент не элемент JQuery, так что вы должны передать его . JQuery использовать методы JQuery

+0

То есть ... overkill. Но да, это работает! –

1

Существует функция, чтобы выбрать элемент по индексу и по-прежнему держать его как объект JQuery Эта функция .eq():

$(".test").eq(3).before(newElement); 

Это 0 индекс, так 3 выберите 4-й элемент.

Вы должны также обернуть var newElement = "div class=\"test-new\""; между < и > сделать правильный элемент:

var newElement = "<div class=\"test-new\">"; 

JQuery будет интерпретировать это как новый узел вместо селектора.

0

попробовать что-то вроде этого:

HTML

<div class="test">1</div> 
<div class="test">2</div> 
<div class="test">3</div> 
<div class="test">4</div> 

Jquery

$(".test:nth-child(2)").append("<div>newtest</div>"); 

ВЫВОД

1 
2 
newtest 
3 
4 

FIDDLE

+0

'.append' добавит' div' в '.test'. Я думаю, он хочет добавить его перед '.test'. –

+0

@ Karl-AndréGagnon, тогда можно использовать 'preend', правильно? – next2u

+0

Нет, prend - то же самое, он будет добавлен в '.test' (только он будет первым, а не последним, это разница перед добавлением и добавлением). Вам нужны '.after()' или '.before()' –

0

использовать селектор eq в JQuery

var newElement = "div class=\"test-new\""; 
$(".test:eq(3)").before(newElement); 

следует отметить, что newElement должна быть действительной HTML, так что вы можете изменить его на

var newElement = "<div class=\"test-new\"></div>"; 
$(".test:eq(3)").before(newElement); 

скрипки http://jsfiddle.net/0qeh1rL1/

0

Используйте это, должно работать как шарм :)

$(".test:nth-child(3)").before("<div>new item</div>"); 
Смежные вопросы