结合.hover()和.replaceWith()

时间:2011-05-13 13:30:14

标签: jquery

我无法让这个简单的.replaceWith().hover()合作。会感激一些帮助。

当我将鼠标悬停在文本上时,我希望将文本更改为EXPAND,并在鼠标输出时返回SHOWS。我可以将文本更改为EXPAND,但我无法将文本恢复为原始的SHOWS。

JSFiddle代码,适合所有人查看。

$(document).ready(function() {   
   $("p").hover(
      function () {
        $('#shows').replaceWith('<h2>Expand</h2>');
      }, 
      function () {
        $('#shows').replaceWith('<h2>Shows</h2>');
      }
    );
});

3 个答案:

答案 0 :(得分:5)

问题是当你替换它时会丢失id属性。因此,虽然mouseout事件的hover()函数触发但它找不到元素#shows

请改为尝试:

// Change H1 text to "EXPAND" when hovered on, and go *back* to "SHOWS" when the mouse leaves

$(document).ready(function() {   
   $("p").hover(
      function () {
        $('#shows').text('Expand');
      },
      function () {
        $('#shows').text('Shows');
      }
    );
});

你应该总是在这样的例子中使用.text().html(),因为你想要做的就是改变TEXT的内部位或<h2>标签中包含的HTML,而不是比整个元素。

如果你想使用replaceWith:

$(document).ready(function() {   
   $("p").hover(
      function () {
        $('#shows').replaceWith('<h2 id="shows">Expand</h2>');
      },
      function () {
        $('#shows').text('<h2 id="shows">Shows</h2>');
      }
    );
});

答案 1 :(得分:1)

.replaceWith()将完全替换原始元素(#shows) - &gt;不会再找到id=#shows的元素(第二次尝试将失败)。

您想要做的是替换#shows的内部html(使用.html()):

$(document).ready(function() {   
   $("p").hover(
      function () {
        $('#shows').html('<h2>Expand</h2>');
      }, 
      function () {
        $('#shows').html('<h2>Shows</h2>');
      }
    );
});

答案 2 :(得分:0)

使用.replaceWith()方法后,元素#shows不再存在且无法再替换:)