【问题标题】:hide href element in specific UL with javascript使用javascript隐藏特定UL中的href元素
【发布时间】:2012-08-21 16:30:01
【问题描述】:

我们如何在特定的 UL 元素中隐藏 href 元素(不是在所有 UL 元素中,因为 UL 元素具有相同的名称)。

例如,我们有这样的 HTML 代码:

<ul class="UL_tag">
  <li>Text 1</li>
  <li>Text 2</li> 
  <li><a href="http://www.google.com" class="description">Link to GOOGLE</a></li>
</ul>   

<ul class="UL_tag">
  <li>Text 1</li>
  <li>Text 2</li> 
  <li><a href="http://www.yahoo.com" class="description">Link to Yahoo</a></li>
</ul>   

我们可以使用以下代码隐藏这些href:

$('a.description').hide();

如果我只想隐藏一个 UL 元素中的一个 href 元素,我应该如何更改此 javascript 代码?不是所有类名为“description”的 href 元素?

感谢您的帮助!

【问题讨论】:

  • 你想隐藏哪个.....使用 eq(0) 或 :first-child jquary
  • 所讨论的ul 有什么独特之处?
  • 如何识别要隐藏的元素?为什么显示一个,而不是另一个?顺便说一下,这些是a 元素,带有href 属性

标签: javascript jquery html css href


【解决方案1】:

您可以使用 attr href 选择器:

$('a[href="http://www.yahoo.com"]').hide();

这是一个示例链接,您可以使用不同的方法:

和这个问题也相关:jQuery cant access element with its attr href // simple tabs structure

【讨论】:

  • 这将隐藏任何其他指向雅虎的链接 [如果页面中有的话] - 只需将其缩小到 .UL_tag^^
【解决方案2】:

可以遍历dom获取父ul内的元素

$(this).parent().siblings().find('a.description').hide();
// get current clicked > parent li > siblings > find a.description in li siblings > hide

http://jsfiddle.net/CjfXu/1/

编辑

因为你的 li 实际上也被包裹在一个跨度内.. .parent 将无法工作,因为它正在获取跨度元素。您需要使用 .closest() - 获取匹配的最近祖先

$(this).closest('li').siblings().find('.description').hide();

也不要在另一个 click 事件中绑定 click 事件,因为这会导致 dom 将多个事件处理程序附加到元素。始终在 document.ready 函数内绑定。动态创建的元素或当您需要绑定许多元素时,使用委托将是最有效的方法。

你的代码是这样的

$('a.start').bind('click', function(){ // <-- this should be $('a:not(.start)').bind 
     // code

     $('a.start').click(function(e) {            
         $(this).parent().siblings().find('.description').hide();
     });            

});

将任何锚点与 1234562 绑定=每次点击第一个锚点时开始一个点击事件

使用委托

$('parentElement').on('click','element', function(){

})

或 jQuery 1.6 及以下版本

$('parentElement').delegate('element','click', function(){

});

【讨论】:

  • 非常感谢。这看起来很有希望,但不知何故,当我使用我在您的帖子上方发布的 JavaScript 代码时它不起作用。
  • 您在哪里添加此代码?不要在return false; 之后添加它,因为它永远不会到达那个部分
  • 最好的方法是制作自己的小提琴并复制您的问题。这样我就能看到你所看到的
  • 我认为这不起作用,因为我尝试使用“click”两次:$('a.start').bind('click', function(){ 还有:$ ('a.start').click(function(e){ 有什么办法可以改变这些吗?我认为这两者不能一起工作。谢谢你的回答!
  • 你应该使用的第一个$('a:not(.start)').bind('click'jsfiddle.net/4Rtq8
【解决方案3】:

你应该给每个&lt;ul&gt;适当的ids:

<ul class="UL_tag" id="firstList">
  <li>Text 1</li>
  <li>Text 2</li> 
  <li><a href="http://www.google.com" class="description">Link to GOOGLE</a></li>
</ul>   

<ul class="UL_tag" id="secondList">
  <li>Text 1</li>
  <li>Text 2</li> 
  <li><a href="http://www.yahoo.com" class="description">Link to Yahoo</a></li>
</ul>

然后:

$('#firstList a.description').hide();

【讨论】:

  • @IliaRostovtsev, #firstList 将隐藏ul#fisrstList a.description 将隐藏a,它是ul 的孩子
【解决方案4】:

HTML:

<ul class="UL_tag">
  <li>Text 1</li>
  <li>Text 2</li>
  <li><a href="http://www.google.com" class="description">Link to GOOGLE</a></li>
</ul>   

<ul class="UL_tag">
  <li>Text 1</li>
  <li>Text 2</li>
  <li><a href="http://www.yahoo.com" class="description">Link to Yahoo</a></li>
</ul>   

Jquery:

 var d = $('.UL_tag li').children('a')[1]; // If you remove first href element  change it to value "1" to "0"
 $(d).hide();

查看此演示: http://jsfiddle.net/7aNRZ/8/

【讨论】:

    【解决方案5】:

    通过标签名和类选择元素,然后过滤href值:

    $('a.description[href="http://www.google.com"]').hide();
    

    您还可以将结果限制为仅类 .UL_tag 内的元素:

    $('a.description[href="http://www.google.com"]', '.UL_tag').hide();
    

    【讨论】:

      【解决方案6】:

      感谢您的回答,我认为所有这些答案也是正确的答案,但我想要达到的目标有点不同。实际上有 3 个 li 元素(其中两个带有 href 标签):

       <ul class="UL_tag"> 
         <li>There you can download something.</li> 
         <li><a href="rapidshare.com/file.zip"; class="start">Download</a></li> 
         <li><a href="google.com"; class="description">Link to GOOGLE</a></li> 
      </ul>
      

      当您点击“下载”链接时,将调用 javascript:

      $(function(){
          var seconds = 10;
          var canClick = true;
          seconds *= 1000;
      
          $('a.start').bind('click', function(){
            if(canClick){
              var link = $(this).attr('href');
              var loader = $('input[name="link"]').val();
      
              $(this).html('<img src="' + loader + '"/>');
              setInterval(function(){
                  window.location.reload();
                  window.location = link; 
              }, seconds);
              // Description will be hidden everywhere.
              // How we can hide description in only one
              // row. In row where the a.start was called?
              $('a.description').hide();
      
              canClick = false;
              }
              return false;
          });
      });
      

      它将显示“正在加载的 gif”,10 秒后用户将重定向到下载页面。

      那么是否可以只在一行而不是到处隐藏“描述”。就在我们称之为“开始”函数的那一行?

      最大的问题是只隐藏一个 li 元素,当所有 UL 和 li 具有相同的类名时。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-24
        • 2011-07-15
        • 1970-01-01
        • 2014-09-12
        • 1970-01-01
        • 2015-11-10
        • 2014-07-11
        相关资源
        最近更新 更多