2013-05-05 49 views
-1

我需要寫在本地JavaScript以下的jQuery代碼:.after()原生JavaScript中的jQuery方法?

$("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)。 – 2013-05-05 16:24:30

+7

jQuery是開源的,看看它是如何做到的。 – Barmar 2013-05-05 16:25:48

+0

http://james.padolsey.com/jquery/#v=1.7.2&fn=jQuery.fn.after可能是一個完美的起點 – m90 2013-05-05 16:27:15

回答

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

是的,工作,謝謝噸! – 2013-05-05 18:23:25

-1

雖然我猶豫不決,告訴你如何做到這一點,你應該專注於方法insertBeforeDOM api。雖然你應該在這裏提出問題之前真的做一個快速的谷歌搜索,這裏是對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 2013-05-05 16:31:19

+0

這個答案可能會更好地作爲評論,因爲它並不真正提供解決方案,只是一個正確的方向。除非你願意展示OP如何使用你提到的方法? – 2013-05-05 16:31:43

+0

我搜索了每一個地方,並在javascript中使用insertBefore方法,但我需要在所有的錨點標籤之後或之前插入像jquery一樣的插件,但是Javascript只在插入一個錨標籤之後插入,如果我通過錨來循環播放。每個錨點之後的gif圖像,然後它只能放在最後一個錨點。 – 2013-05-05 16:31:55