1

这是一个理论问题:

是否有一个通用名称来指代所有不接受函数作为参数的 jQuery 函数?比如 index()、children()、height() ...

更新: 如果我知道名称,那么我可以提出这样的问题:“我可以将函数传递给“命名”函数吗?”

为了提供更多细节,我尝试将一个函数作为参数传递给 jQuery 的.index()方法,但它不起作用:

 textbox.closest('tr').index(function(){var index = $(this);}); 
4

1 回答 1

1

所有带参数的 jQuery 函数都可以带函数。在 JavaScript 中,函数是对象,jQuery 或 vanilla JavaScript 都不是类型安全的。换句话说,只要函数接受参数,它就会接受一个函数作为它的参数之一。

因此,不接受任何参数的方法是唯一不接受函数的方法。


编辑:

如果您想获得技术知识,那么即使不接受任何参数的方法仍将接受函数作为参数。就像 JavaScript 不是类型安全的一样,它实际上也不会强制执行有关函数签名的任何规则,即它不检查输入的参数数量是否与定义的参数数量相匹配。这就是为什么您会收到“空引用”错误(如果未处理)而不是“没有函数 [函数名称] 采用参数 [参数列表]”。这也是为什么您可以向函数传递无限数量的参数的原因,即使它只需要一个、两个或没有参数。


更新:

关于我对您最初问题的解决方案,我想通过添加 jQuery 是一种可靠的语言来澄清,因为它通常会在传递无效参数时简单地返回 null (但在传递不正确的数字时它不会出错论据)。JavaScript 在许多情况下是相同的,但是,正如我所暗示的和常识所决定的那样,向方法传递太多或太少的参数都是荒谬的,无论其合法性如何。

关于您的更新和评论,我认为您误解了 jQuery.index()方法的基本用途。如果使用得当,此方法在元素集合上调用,并以选择器(或要匹配的元素)作为参数,并返回满足给定选择器或匹配给定元素的元素第一次出现的索引.


更新:

从您更新的示例中,我可以看出我认为您对.index()函数的使用有一点误解是正确的。该函数采用选择器或元素,但您传递的函数也不返回。这是您需要的(使用您现有的语法):

textbox.closest('tr').index(function(){ return $(this);}); 

或者(更简单):

textbox.closest('tr').index($(this));

要添加更多细节(也许更好地回答您最初的问题),您还可以执行以下操作:

function getOnlyParagraphElements() {
    return this.tagName === "p";
}

var collection = $("body").find("*");
var firstParaIndex = collection.index(getOnlyParagraphElements);

这只是一个示例(是的,我知道我可以只使用 jQuery 来获取段落),但概念是相同的 - 这就是您制作自己的选择器的方式。

另请注意,在您的示例中,您始终检查单项集合,这意味着您只会获得值0或值-1(如果元素与选择器/传入的元素不匹配)。如果您的目标是获取您正在调用该方法的元素相对于其兄弟元素的索引,那么您只需要调用该方法而不提供任何参数。

于 2012-11-13T15:11:33.500 回答