jQuery:尝试编写我的第一个插件,如何将选择器传递给我的函数?

标签 jquery plugins jquery-plugins css-selectors

我正在尝试开始编写一些简单的 jQuery 插件,并且在我的第一次尝试中,如果我认为我会编写一些除了应用 .first.last 类之外不执行任何其他操作的东西传递的元素。

例如,我希望最终能够:

$('li').firstnlast();

因此在这个 html 结构中:

<ul>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
</ul>
<ul>
    <li></li>
    <li></li>
</ul>

它将创建以下内容:

<ul>
    <li class="first"></li>
    <li></li>
    <li></li>
    <li class="last"></li>
</ul>
<ul>
    <li class="first"></li>
    <li class="last"></li>
</ul>

到目前为止我在插件中写的是:

(function($) {

    $.fn.extend({
        firstnlast: function() {
            $(this)
                .first()
                .addClass('first')
                .end()
                .last()
                .addClass('last');
        }
    });
})(jQuery);

但是上面只返回这个:

<ul>
    <li class="first"></li>
    <li></li>
    <li></li>
    <li></li>
</ul>
<ul>
    <li></li>
    <li class="last"></li>
</ul>

似乎仅将 li 传递到函数中,它将查看整个页面上的所有 li 元素,然后将类应用于它。

我需要弄清楚的是,我如何才能基本上使函数“上下文感知”,以便将上述 li 传递到函数中会将这些类应用到这些 li >s 位于父 ul 内部,而不是整个页面上的第一个和最后一个 li

任何提示、想法和帮助将不胜感激。

最佳答案

您想使用 :first-child :last-child 得到那些<li>就在这里,像这样:

this.filter(':first-child:not(:last-child)').addClass('first')
    .end().filter(':last-child:not(:first-child)').addClass('last');

这得到了相对于父级的第一个和最后一个,这似乎就是你想要的,试一试:)

更新:现在处理 1 <li> 的情况里面 <ul> ,这些元素将被忽略。

关于jQuery:尝试编写我的第一个插件,如何将选择器传递给我的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2569023/

相关文章:

javascript - Elm-Brunch 编译问题 : 'split' of undefined

jquery - 如何将 jQuery 插件功能限制为仅某些元素?

jQuery - 无法更改 IE 中克隆表单的 id

jquery - jVectorMap:如何通过坐标动态添加标记?

jquery - Yoast Plugin for WordPress使用Google Analytics(分析)跟踪自定义事件

javascript - ajax 调用后如何将 Jquery 插件连接到部分 View 中的表

javascript - 外星人名字生成器

Javascript:为什么 ".deletebutton"的点击事件没有触发

ajax - 让 jQuery TipTip 能够处理 ajax 加载的内容

ajax - 尝试将 jQuery 1.4.2 插件更新到 1.8.2 但出现语法错误、无法识别的表达式