这是一个理论问题:
是否有通用名称来引用所有那些不接受函数作为参数的jQuery函数? 这样的index(),children(),height()......
更新 如果我知道这个名字,那么我可以提出这样的问题:“我可以将函数传递给”命名“函数吗?”
为了提供更多细节,我尝试将函数作为参数传递给jQuery的.index()
方法,但它不起作用:
textbox.closest('tr').index(function(){var index = $(this);});
答案 0 :(得分:1)
所有带参数的jQuery函数都可以使用函数。在JavaScript中,函数是对象,jQuery或vanilla JavaScript都不是类型安全的。换句话说,只要函数接受参数,它就会接受一个函数作为其参数之一。
Ergo,不接受任何参数的方法是唯一不接受函数的方法。
修改强>
如果你想获得技术,那么即使不接受任何参数的方法仍然会接受一个函数作为参数。正如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
(如果元素不匹配)选择器/传入元素)。如果你的目标是获取你正在调用方法的元素的索引相对于它的兄弟,那么你只需要调用方法而不提供任何参数。