2013-04-29 64 views
4

,这是我的html:在悬停追加跨度一次

<ul> 
    <li>Milk</li> 
    <li>Bread</li> 
    <li class='fade'>Chips</li> 
    <li class='fade'>Socks</li> 
    </ul> 

这是我的js函数: -

$("li").hover(
    function() { 
    $(this).append($("<span> ***</span>")); 
    }, 
    function() { 
    $(this).find("span:last").remove(); 
    } 
); 

我想这种类型的输出: -

<ul> 
     <li>Milk</li> 
     <li>Bread</li> 
     <li class='fade'>Chips</li> 
     <li class='fade'>Socks</li> 
<span> ***</span> 
     </ul> 

这里我试图在鼠标悬停在li上追加一个跨度。
其工作完美。
但我只想在最后一次后追加一次。
谢谢。

回答

1

使用one

$("li").one("hover", function() { 
    $(this).append($("<span> ***</span>")); 
}); 

http://api.jquery.com/one/

+1

但其工作时,点击右侧立.... – 2013-04-29 07:19:02

+0

@JackPhp - 这将在李的工作是只有其追加一次。 – 2013-04-29 07:19:41

+1

@DarrenDavies你不需要传递一个事件作为第一个参数吗? – billyonecan 2013-04-29 07:23:31

2

我发现了jQuery api manual的例子,这不就是你想要什么?

$("li").hover(
    function() { 
    $(this).append($("<span> ***</span>")); 
    }, 
    function() { 
    $(this).find("span:last").remove(); 
    } 
); 

或者你不想删除跨度当鼠标离开,只是想追加一个跨度:

$("li").hover(function() { 
    if ($(this).find('span').length == 0) { 
    $(this).append($("<span> ***</span>")); 
    } 
}); 
+0

它的工作,但我想在最后李后追加。 – 2013-04-29 07:34:09

+0

@JackPhp你是什么意思?你能发布你的预期结果html吗? – xdazz 2013-04-29 07:35:28

+0

编辑我的问题....请检查.... – 2013-04-29 07:42:33

0

只需先检查跨度已经存在。请记住,如果您想在鼠标离开后移除跨度,则“悬停”可能需要两个功能。这相当于mouseover和mouseleave的组合。

$("li").hover(
    function() { 
    if ($(this).is(':empty')) { 
     $(this).append($("<span> ***</span>")); 
    } 
    }); 

参考文献:hoveremptymouseovermouseleave

0

运用现代JS!

const lis = document.getElementsByTagName("li"); 
let span; 
for (const li of lis) { 
    li.addEventListener("mouseover", function() { 
     // Do something cool 
     if (!span) { 
      span = document.createElement("span"); 
      span.innerText = " ***"; 
      li.parentElement.append(span); 
     } 
    }, {once : true}); // (optional) This will make it fire only once for each li 
         // You could add one "once" listener to just the ul as well 
} 

DocumentationCanIUse