2013-05-05 82 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