Jquery:正在删除父列表项的href属性

Jquery: Removing href attribute of parent list items

本文关键字:href 属性 列表 删除 Jquery      更新时间:2023-09-26

我有一个菜单,由嵌套在两个<li> s中的两个<ul> s组成。例如:

<ul>
<li><a href="somewhere.html">Item 1</a></li>
<li><a href="somewhere.html">Item 2</a></li>
<li><a href="somewhere.html">Item 3</a>
  <ul>
    <li><a href="somewhere.html">Sub Item 1</a></li>
    <li><a href="somewhere.html">Sub Item 2</a></li>
  </ul>
</li>
</ul>

对于具有嵌套<ul><li>,我想用#替换它们的href属性,例如:

<li><a href="somewhere.html">Item 2</a></li>
<li><a href="#">Item 3</a>
      <ul>
        <li><a href="somewhere.html">Sub Item 1</a></li>

我写了这个脚本来做到这一点,但它似乎影响了两个列表中的所有a标记。

$.each($("#menu ul li"), function() {
  if($(this).has("ul")){
   $(this).find("a").attr("href", "#");
  };
});

不知道有没有人能告诉我哪里出了问题?

如果dom有如下子项,请检查dom。

$(this).children('ul').length

在您的代码中,如果您使用.has 进行检查,则其内部条件

已测试的工作代码

<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">
    $(function()
    {
        $.each($("#menu ul li"), function()
        {
            if($(this).children('ul').length > 0)
            {
                $(this).find("a").attr("href", "#");
            };
        });
    });
</script>
<ul>
    <li><a href="somewhere.html">Item 1</a></li>
    <li><a href="somewhere.html">Item 2</a></li>
    <li><a href="somewhere.html">Item 3</a>
      <ul>
        <li><a href="somewhere.html">Sub Item 1</a></li>
        <li><a href="somewhere.html">Sub Item 2</a></li>
      </ul>
    </li>
</ul>

找到嵌套的<ul>元素,导航到它们的父<li>,选择其中的<a>,然后更改href

$('li > ul').parent().children('a').attr('href', '#');


至于为什么您的代码不起作用,主要有两个问题。首先,find遍历所有级别的子体。您实际要做的只是遍历一级子体,所以请使用children。其次,has(非直观地)不返回bolean值,它只是将匹配集过滤为必要的元素(因此在if中使用它是没有意义的,因为任何非空对象的计算结果都是true)。更正后,您的代码将显示为:

$("#menu ul li").has("ul").children("a").attr("href", "#");

这两种方法中的任何一种都可以满足您的需要,但第二种方法更简单,因此可能会产生更好的性能。

这将很好:http://jsfiddle.net/H8JDy/

$('#menu ul li > ul').siblings('a').attr('href', '#'); // <---this does the trick

正如nbrooksthere's no reason for it to be wrapped in the loop

所评论的那样