我的任务包含几个步骤:
隐藏页面中的所有链接
检测具有等于当前页面url的href属性的链接元素
显示此元素的邻居
我使用的html是:
<div class="alllinkswrap">
<a class="allproductsurls" href="blabla1.com">1</a>
<a class="allproductsurls" href="blabla2.com">2</a>
<a class="allproductsurls" href="blabla3.com">3</a>
<a class="allproductsurls" href="blabla4.com">4</a>
<a class="allproductsurls" href="blabla5.com">5</a>
</div>
我试图用
display: none
隐藏所有链接元素,只想显示当前链接顶部和底部的两个链接。我使用的jQuery代码: $(docment).ready(function(){
var thispageurl = window.location.href;
$(".alllinkswrap").children().each(function(){
if (this.href.indexOf(thispageurl))
{
$(this).next().show();
$(this).prev().show();
}
});
});
我猜这个错误在某些地方,
$(this).next
等等。但对jQuery来说还是个新手。你能发现这个问题吗? 最佳答案
原件
您的indexOf(…)需要检查not-1,当未找到thispageurl
时,它将返回-1。或者可以检查它是否等于0,因为当找到目标链接时,应该在索引0处找到它。
更新
如果您确实想检查当前URL和目标ref是否相等,我们需要使用Javascript中的in this.href
或==
比较。这是因为当页面位于子idrectories中或您位于域中时,我们会遇到问题。例如:
如果===
=thispageurl
和http://url.com
=this.href
使用http://url.com/page1.html
将返回0,但不正确。如果我们在该场景中颠倒了forthis.href.indexOf(thispageurl)
的索引,thispageurl.indexOf(this.href)
返回-1。同样,如果我们分别将.indexOf()
和thispageurl
翻转到this.href
和http://url.com/page1.html
,我们会遇到类似的情况,这取决于我们采用的是哪种索引。
所以我更新了下面的代码来检查字符串值是否相等。
var thispageurl = window.location.href;
$(".alllinkswrap").children().each(function(){$(this).hide()})
$(".alllinkswrap").children().each(function(){
if (this.href === thispageurl)
{
$(this).next().show();
$(this).prev().show();
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="alllinkswrap">
<a class="allproductsurls" href="blabla1.com">1</a>
<a class="allproductsurls" href="blabla2.com">2</a>
<a class="allproductsurls" href="http://stacksnippets.net/js">3</a>
<a class="allproductsurls" href="blabla4.com">4</a>
<a class="allproductsurls" href="blabla5.com">5</a>
</div>