0

目前我正在使用下面的函数来执行一个简单的幻灯片......

function jeans(jean, links) {

$(links).hide();

$(jean).hover(

  function() {
        $(links).show('slow');
    },

  function() {
        $(links).hide('slow');
});}

并在需要的地方调用它......

jeans('#red-jeans', '#red-jeans ul');
jeans('#blue-jeans', '#blue-jeans ul');
jeans('#yellow-jeans', '#yellow-jeans ul');

我希望能够通过在父级“#red-jeans”上附加一个类来执行此操作。

我正在尝试类似的东西

function jeans(selector) {

$(selector 'ul').hide();

$(selector).hover(

  function() {
        $(selector 'ul').show('slow');
    },

  function() {
        $(selector 'ul').hide('slow');
});}

...但是我的语法很糟糕!

如果有人能指出我正确的方向,将不胜感激!


现在的问题是幻灯片在我上课的每个元素上运行。任何人都可以推荐一个只能在当前悬停时激活它的修改吗?我认为某处需要一个(这个)......

谢谢!

4

5 回答 5

3

这:

$(selector 'ul').hide();

应该

$('ul', selector).hide();

以及所有其他类似的地方。这样做是在里面寻找ul元素selector

于 2012-08-10T10:03:42.613 回答
1

有几种方法可以以干净的方式实现这一目标:

$(selector).find('ul')
$(selector + ' ul')
$('ul', selector)

都是等价的。

一般来说,如果您更频繁地使用选择器,我建议您缓存它们,因为$()在内部使用选择器调用可能会非常昂贵。这样你在重构时有更好的性能和更少的麻烦。
要使幻灯片依赖于您当前的悬停,请使用$(this)而不是通用的selector.

function(selector){

  var $element = $('ul', selector);

  $element.hide();

  $(selector).hover(
    function() {
        $(this).find('ul').show('slow');
      },
    function() {
        $(this).find('ul').hide('slow');
  });

}
于 2012-08-10T10:15:27.397 回答
1

已经回答,但这是做同样事情的好方法。您可以像这样创建自己的 jQuery 插件...

$.fn.jeans = function() {
    $(this).find("ul").hide();
    $(this).hover(
        function() {
            $(this).find("ul").show('slow');
        },
        function() {
            $(this).find("ul").hide('slow');
        }
    );
}

您可以通过选择要应用它的元素并像使用常规 jQuery 函数一样使用它来调用它...

$("#red-jeans, #blue-jeans, #yellow-jeans").jeans();

仅供将来参考;)

于 2012-08-10T10:27:21.677 回答
0

只需附加字符串: $(selector + ' ul').hide('slow');

于 2012-08-10T10:08:51.487 回答
0

您可以尝试function如下更新您的 JavaScript:

function jeans(selector) {

  // you will have to use 'find' and it wil only be for the first 'ul' as well
  $(selector).find('ul:first').hide();

  $(selector).hover(

    function() {
      $(selector).find('ul:first').show('slow');
    },

    function() {
      $(selector).find('ul:first').hide('slow');
  });
}

然后这样称呼它...

jeans('#red-jeans');
jeans('#blue-jeans');
jeans('#yellow-jeans');

我希望这会有所帮助

于 2012-08-10T10:09:25.843 回答