2013-05-05 1 views
-1

Мне нужно написать следующий JQuery код в родной Javascript:.after() метод jQuery в родном JavaScript?

$("a[href $= pdf]").after("<img src='images/small_pdf_icon.gif' align='center' />"); 

А вот мой HTML:

<ul class="navlist" id="navlinks"> 
    <li><a href="someurl.html">Link #1</a></li> 
    <li><a name="#anchor1">Named Anchor Link</a></li> 
    <li><a href="someurl.html">Link #2</a></li> 
    <li><a href="someurl.pdf">Link #3</a></li> 
    <li><a href="someurl.html">Link #4</a></li> 
    <li><a href="someurl.html">Link #5</a></li> 
    <li><a href="someurl.pdf">Link #6</a></li> 
    <li><a href="someurl.html">Link #7</a></li> 
    <li><a href="mailto:[email protected]">Email Link</a></li> 
    <li><a href="someurl.pdf">Link #6</a></li> 
    <li><a href="someurl.pdf">Link #6</a></li> 
    <li><a href="someurl.pdf">Link #6</a></li> 
</ul> 

я могу использовать document.querySelectorAll('a'), чтобы получить все теги привязки, но как я могу писать код JavaScript для .after() или .before() методов?

Пожалуйста, помогите мне преобразовать вышеуказанный код jQuery в JavaScript.

Вот код Jquery, который я сделал:

http://jsfiddle.net/5dgZV/

И вот Javascript код, но я не могу вставить изображение после всех якорей:

http://jsfiddle.net/REuJP/

+5

Покажите нам [что вы пробовали] (http://mattgemmell.com/2008/12/08/ что-есть-вы испытанный /). См. [О переполнении стека] (http://stackoverflow.com/about). –

+7

jQuery - с открытым исходным кодом, посмотрите, как он это делает. – Barmar

+0

http://james.padolsey.com/jquery/#v=1.7.2&fn=jQuery.fn.after может быть идеальной отправной точкой – m90

ответ

1

Я думаю, что это происходит потому, что вы неоднократно пытались добавить один и тот же DOM к каждому тегу a. Если вы создали новый элемент для каждой итерации цикла, он должен работать:

for(var i=0;i<document.querySelectorAll('a').length;i++){ 
    var imgSrc=document.createElement("img"); 
    imgSrc.setAttribute("src", "http://i.imgur.com/YXsJZVe.gif"); 
    document.querySelectorAll('a')[i].appendChild(imgSrc); 
} 

Working Fiddle

+0

Да, это сработало, спасибо Тон! –

-1

в то время как я не решаюсь показать вам, как это сделать, вы должны заглянуть в DOM api специально по методу insertBefore. Несмотря на то, что вам действительно нужно выполнить быстрый поиск по Google, прежде чем задавать вопросы здесь, на SO, вот ссылка на insertBeforehttps://developer.mozilla.org/en-US/docs/DOM/Node.insertBefore.

insertAfter - это то, что вы бы установили, используя пользовательскую функцию. как этот

insertAfter(newNode){ 
     var refNode = document.getElementById("xyz"); 
     refNode.parentNode.insertBefore(newNode, refNode.nextSibling); 
    } 

newNode в этом случае является фактическим DOM элементом. который будет создан следующим образом: var newNode = document.createElement("p");

Изменить тип p для типа элемента, который вы хотите создать. в вашем случае это будет img. Затем вы можете установить соответствующие атрибуты/Свойства, а затем отправить их на insertAfter выше. Если вам нужно указать refNode, добавьте для него аргумент следующим образом: insertAfter(newNode,refNode).

Способ использования этого с jquery будет insertAfter(newNode,$("#findme")), так что у вас есть представление о том, что происходит, очевидно, если вы добавите аргумент refNode, удалите декларацию из тела функции.

+0

Я был отмечен, потому что? Учитывая те методы, которые вы использовали бы, и api, которые вы должны использовать для этого? – Nomad101

+0

Этот ответ, вероятно, будет лучше работать как комментарий, так как он действительно не представляет собой решение, а просто продукт в правильном направлении.Если вы не хотите показать OP, как использовать упомянутые вами методы? –

+0

Я искал все, где, а также использовал метод insertBefore в javascript, но мне нужно вставить после или перед всеми ANCHOR TAGS, как jquery, но Javascript только вставляет после одного Anchor Tag, если я зацикливаю на якоря, чтобы это сделать. gif изображение после каждого якоря, а затем он ставит последний якорь. –