jQuery 提示和技巧

IT技术 javascript jquery
6个回答

创建 HTML 元素并保留引用

var newDiv = $("<div />");

newDiv.attr("id", "myNewDiv").appendTo("body");

/* Now whenever I want to append the new div I created, 
   I can just reference it from the "newDiv" variable */


检查元素是否存在

if ($("#someDiv").length)
{
    // It exists...
}


编写自己的选择器

$.extend($.expr[":"], {
    over100pixels: function (e)
    {
        return $(e).height() > 100;
    }
});

$(".box:over100pixels").click(function ()
{
    alert("The element you clicked is over 100 pixels height");
});
由于我还不能编辑社区维基:将分配和存在检查与 if ((var someDiv = $("#someDiv")).length) { /* do stuff with someDiv... */ }
2021-03-23 04:00:38
编写你自己的选择器非常巧妙
2021-03-25 04:00:38
我喜欢新的选择器部分,不知道。
2021-03-25 04:00:38
此外,如果有任何帮助,您实际上可以执行 $("<div/>") 并实现与 $("<div></div>") 相同的功能
2021-04-04 04:00:38
@Ben:我在 JavaScript 中避免使用此类习语的原因是因为我不想给人一种someDivif语句中被限定的错觉,因为它不是;JavaScript 只支持函数作用域
2021-04-13 04:00:38

jQuery 的data()方法很有用,但并不为人所知。它允许您在不修改 DOM 的情况下将数据绑定到 DOM 元素。

data() 确实有很大帮助。
2021-03-17 04:00:38
我注意到它不适用于没有设置 ID 的元素。
2021-04-08 04:00:38
使用 data() 而不是声明全局 js 变量,imo。
2021-04-10 04:00:38

嵌套过滤器

您可以嵌套过滤器(如nickf 所示)。

.filter(":not(:has(.selected))")
尽管要小心...:已执行全深度搜索,因此可能会变得非常昂贵。
2021-03-15 04:00:38

我真的不喜欢$(document).ready(fn)捷径。当然它减少了代码,但它也减少了代码的可读性。当你看到时$(document).ready(...),你知道你在看什么。$(...)以太多其他方式使用,无法立即变得有意义。

如果你有多个框架,你可以jQuery.noConflict();像你说的那样使用,但你也可以为它分配一个不同的变量,如下所示:

var $j = jQuery.noConflict();

$j("#myDiv").hide();

如果您有多个可以归结为$x(...)样式调用的框架,则非常有用

@Oli:关于文档 ready-shorthand;你有一定道理。但无论如何:这是一个提示/技巧。我在所有代码中使用的一种纯粹是因为我认为它“看起来”更好。个人喜好问题,我想:)
2021-03-14 04:00:38
当我看到 $(function(){...}) 我知道发生了什么。越平常的东西应该越短。这就是为什么我们将经常调用的代码片段变成函数的原因。
2021-03-18 04:00:38
每天我都在浏览毫无意义的 XML/XLS/XLST、用太多抽象层编写的站点、站点上复杂的故障转移系统,这些系统永远不会超过最简陋的服务器......但仍然有人抱怨 $( <字符串>) & $(<函数>)。让我想哭:)
2021-03-21 04:00:38

哦哦,别忘了jQuery 元数据data() 函数很棒,但它必须通过 jQuery 调用来填充。

而不是破坏 W3C 对自定义元素属性的合规性,例如:

<input 
  name="email" 
  validation="required" 
  validate="email" 
  minLength="7" 
  maxLength="30"/> 

改用元数据:

<input 
  name="email" 
  class="validation {validate: email, minLength: 2, maxLength: 50}" />

<script>
    jQuery('*[class=validation]').each(function () {
        var metadata = $(this).metadata();
        // etc.
    });
</script>
html5 数据属性使这不再是一个问题;正在讨论将 html5 数据属性与 jquery 的 data() 函数内联:forum.jquery.com/topic/...
2021-03-20 04:00:38
@Oskar - 是的,这已在 jQuery 1.4.3 中实现 -data-*属性可通过调用自动获得.data()
2021-04-05 04:00:38