2

我有一个列表,用作我正在构建的站点的一个侧边栏中的弹出菜单。

我正在尝试<li>通过 javascript 删除最后一项,因为站点后面的 CMS 会即时构建此列表,因此我无法在 HTML 本身中将其删除。

我遇到了一个奇怪的情况,即我的代码适用于 IE、Safari 和 FireFox,但不适用于 Chrome。在 Chrome 的情况下,代码会删除列表的最后两项。

菜单/列表:

<div class="SideCategoryListFlyout">
   <ul class="sf-menu sf-vertical sf-js-enabled">
      <li>
         <a class="sf-with-ul" href="http://myurl/clearance/">
         Clearance
         <span class="sf-sub-indicator"> »</span>
         </a>
         <ul style="display: none; visibility: hidden;"> </ul>
      </li>
      <li>
         <a class="sf-with-ul" href="http://myurl/Promotions/">
         Promotions
         <span class="sf-sub-indicator"> »</span>
         </a>
         <ul style="display: none; visibility: hidden;"> </ul>
      </li>
      <li>
         <a class="sf-with-ul" href="http://myurl/Notebooks/">
         Notebooks
         <span class="sf-sub-indicator"> »</span>
         </a>
         <ul style="display: none; visibility: hidden;"> </ul>
      </li>
      <li>                                                          <-- REMOVE
         <a class="sf-with-ul" href="http://myurl/REMOVE/">         <-- REMOVE
         REMOVE                                                     <-- REMOVE  
         <span class="sf-sub-indicator"> »</span>                   <-- REMOVE
         </a>                                                       <-- REMOVE  
         <ul style="display: none; visibility: hidden;"> </ul>      <-- REMOVE
      </li>                                                         <-- REMOVE
   </ul>
</div>

我的 Javascript

<script type="text/javascript">
$(window).load(function(){
    $('.SideCategoryListFlyout li:last-child').remove();
});
</script>
4

4 回答 4

3

为什么不只是隐藏它,使用 CSS 规则应该适用于所有情况:

.SideCategoryListFlyout ul.sf-menu > li:last-child {
   display:none;
}
于 2013-08-02T10:32:28.643 回答
1

也许 Chrome 正在加载两次窗口。通常等待文档准备好,而不是等待窗口加载。尝试这个:

<script type="text/javascript">
$(document).ready(function(){
    $('.SideCategoryListFlyout ul li:last').remove();
});
</script>

编辑:

我已经在 Chrome 和 FireFox 中检查了这项工作,这里:http: //jsfiddle.net/n6fQ8/

于 2013-08-02T09:42:08.080 回答
0

你可以试试这个:

$('.SideCategoryListFlyout li').last().remove();

或者如果你想要几个 li 你可以使用这个:$('.SideCategoryListFlyout').children().slice(0, n).remove();

于 2013-08-02T09:47:04.710 回答
0

好像你的 CMS 使用了 Superfish 的插件

像这样破解..

$('.SideCategoryListFlyout').on('mouseenter.sfremove',function(){
        $('>ul > li', this).last().remove();
        $(this).off('mouseenter.sfremove');
});

演示:http: //jsfiddle.net/2hFXx/2

于 2013-08-02T09:41:23.360 回答