我的任务包含几个步骤:
隐藏页面中的所有链接
检测具有等于当前页面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中或您位于域中时,我们会遇到问题。例如:
如果====thispageurlhttp://url.com=this.href使用http://url.com/page1.html将返回0,但不正确。如果我们在该场景中颠倒了forthis.href.indexOf(thispageurl)的索引,thispageurl.indexOf(this.href)返回-1。同样,如果我们分别将.indexOf()thispageurl翻转到this.hrefhttp://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>

09-10 05:04
查看更多