2014-11-25 44 views
0

我一直在研究一些jQuery代码,如果span文本存在,它将向li添加一个类。这样它将为每个li添加一个不同的类。如果span文本存在,我如何将每个类添加到li如果跨文本等于某些东西,我如何才能将类添加到最近的li?

这是我到目前为止。

$(document).ready(function() { 
 

 
    // Adds SPAN tags 
 
    $('.menu > ul > li > a').each(function() { 
 
    $(this.firstChild).wrap('<span></span>'); 
 
    }); 
 

 
    if ($('.menu > ul > li:first-child > a > span').text() == "Dashboard") { 
 

 
    $('span:contains("dashboard")').closest("li").addClass('dashboard'); 
 
    } else { 
 
    $('.menu > ul > li').addClass('Returns False'); // Added this for testing only 
 
    } 
 
    
 
});
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 

 
The HTML currently looks like this 
 

 
<div class="menu"> 
 
    <ul> 
 
    <li><a class="user_menu_link_selected" href="#">Dashboard</a> 
 
    </li> 
 
    <li><a class="user_menu_link" href="#">Monitor</a> 
 
     <li> 
 
     <li><a class="user_menu_link" href="#">Admin</a> 
 
     </li> 
 
     <li><a class="user_menu_link" href="#">FTP</a> 
 
     </li> 
 
    </ul> 
 
</div>

这是我希望它看起来

<div class="menu"> 
    <ul> 
     <li class="dashboard"><a class="user_menu_link_selected" href="#"><span>Dashboard</span></a></li> 
     <li class="monitor"><a class="user_menu_link" href="#"><span>Monitor</span></a><li> 
     <li class="admin"><a class="user_menu_link" href="#"><span>Admin</span></a></li> 
     <li class="ftp"><a class="user_menu_link" href="#"><span>FTP</span></a></li> 
    </ul> 
</div> 
+1

选择器区分大小写,“仪表板”不在内容上。另外,如果您使用最近为什么使用其他条件来检查其文本是仪表板? – GillesC 2014-11-25 08:05:09

回答

3

如果你改变了最初的标记这是更好。

但如果你不能那么它看起来像类名是一样的跨度,以便

$(document).ready(function() { 
 
    // Adds SPAN tags 
 
    $('.menu > ul > li > a').wrapInner('<span></span>'); 
 

 
    $('.menu > ul > li').addClass(function() { 
 
    return $(this).find('> a > span').text().trim().toLowerCase() 
 
    }) 
 
});
.menu li { 
 
    margin-bottom: 5px; 
 
} 
 
.menu span { 
 
    border: 1px solid red; 
 
} 
 
.dashboard { 
 
    background-color: lightgrey; 
 
} 
 
.monitor { 
 
    background-color: lightblue; 
 
} 
 
.admin { 
 
    background-color: lightyellow; 
 
} 
 
.ftp { 
 
    background-color: lightgreen; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div class="menu"> 
 
    <ul> 
 
     <li><a class="user_menu_link_selected" href="#">Dashboard</a></li> 
 
     <li><a class="user_menu_link" href="#">Monitor</a></li> 
 
     <li><a class="user_menu_link" href="#">Admin</a></li> 
 
     <li><a class="user_menu_link" href="#">FTP</a></li> 
 
    </ul> 
 
</div>


的文本。如果关系不是那么简单然后使用键值对

$(document).ready(function() { 
 
    // Adds SPAN tags 
 
    $('.menu > ul > li > a').wrapInner('<span></span>'); 
 

 
    var map = { 
 
    Dashboard: 'dashboard', 
 
    Monitor: 'monitor', 
 
    Admin: 'admin', 
 
    FTP: 'ftp' 
 
    } 
 
    $('.menu > ul > li').addClass(function() { 
 
    return map[$(this).find('> a > span').text().trim()] 
 
    }) 
 
});
.menu li { 
 
    margin-bottom: 5px; 
 
} 
 
.menu span { 
 
    border: 1px solid red; 
 
} 
 
.dashboard { 
 
    background-color: lightgrey; 
 
} 
 
.monitor { 
 
    background-color: lightblue; 
 
} 
 
.admin { 
 
    background-color: lightyellow; 
 
} 
 
.ftp { 
 
    background-color: lightgreen; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div class="menu"> 
 
    <ul> 
 
     <li><a class="user_menu_link_selected" href="#">Dashboard</a></li> 
 
     <li><a class="user_menu_link" href="#">Monitor</a></li> 
 
     <li><a class="user_menu_link" href="#">Admin</a></li> 
 
     <li><a class="user_menu_link" href="#">FTP</a></li> 
 
    </ul> 
 
</div>

+0

这有效,但有没有办法改变addClass函数,因此它不会拾取子菜单,因为我添加它们?当前代码获取所有子菜单并将它们添加到类中。 – James30263 2014-11-25 08:19:42

+0

@ James30263尝试更新'$(this).find('> a> span').text()。trim()' – 2014-11-25 08:22:13

+0

工作正常。谢谢 – James30263 2014-11-25 08:36:59

相关问题