Javascript 在jQuery中获取插件绑定到的元素?

Javascript 在jQuery中获取插件绑定到的元素?,javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,我一直在制作我的第一个jQuery插件,我需要通过一个样式标签在头部添加一些CSS,因为在脚本注入的元素上做内联CSS在IE8-10中有一些奇怪的错误 但是要在头部添加样式,我需要针对用户绑定插件的实际元素 例如: $('input').myPlugin(); // I need to get the text "input" $('#form .foo').myPlugin(); // I need to get the text "#form .foo" 是否可以在插件中获取此数据?该字符

我一直在制作我的第一个
jQuery
插件,我需要通过一个样式标签在
头部添加一些CSS,因为在脚本注入的元素上做内联CSS在IE8-10中有一些奇怪的错误

但是要在头部添加样式,我需要针对用户绑定插件的实际元素

例如:

$('input').myPlugin(); // I need to get the text "input"
$('#form .foo').myPlugin(); // I need to get the text "#form .foo"

是否可以在插件中获取此数据?

该字符串是对象的选择器属性:

$.fn.myPlugin = function(){
    console.log(this.selector);
}
$('#form .foo').myPlugin(); // logs '#form .foo'
但使用它看起来是一种糟糕的做法(正如charlietfl所指出的,出于充分的理由,它也被弃用)。你不应该需要它。要设置元素的样式,可以直接执行以下操作

$.fn.myPlugin = function(){
    this.css('color', 'red');
}
$.myPlugin 解决问题的推荐方法是使用
和下面介绍的其他方法。如果需要选择器作为字符串,可以将函数定义为jQuery(
$
)的子函数,并以与jQuery的&.ajax和$.extend类似的方式执行该函数。这样做的目的是使它成为jQuery的子代,并且是
$.fn
的子代,因此它仍然可以被“分类”为常规的jQuery插件或jQuery的原型。当您将插件设置为
$.fn
时,它被设置为jQuery的原型,因此您必须运行jQuery函数。在这里我们可以这样做,但因为函数也是对象,所以我们可以将该函数设置为$.myPlugin,使其仍然是jQuery的一部分,但防止用户输入选择器两次。由于此.selector已弃用(可能很快就会被删除),因此它比通过函数运行来生成选择器要好

$.myPlugin = $.fn.myPlugin = function (selector) {
    console.log(selector);
}

$.myPlugin('#selector'); //Logs: '#selector
$.fn是完全可选的,只是为了防止用户忘记使用
$执行函数。myPlugin(选择器)
使用
$()时,该函数仍将工作。myPlugin(选择器)

其他选择 如果您不需要字符串,我建议使用jQuery或类似函数()以及
$(this)

$.fn.myPlugin=函数(){
var$this=这个;
var filteredElements=$this.children('a')//
控制台日志(过滤器删除);
} 
$('#form.class').myPlugin();
//日志:属于#form.class的子级
试试看

$.fn.myPlugin=函数(sel){
log(sel,$(this));
};
变量选择器=[“输入”,“#form.foo”];
$(选择器[0]).myPlugin(选择器[0]);//我需要得到文本“输入”
$(选择器[1]).myPlugin(选择器[1])

abc


.selector
已被弃用…从1.9开始也被删除。这就是我设置内联css所做的,但正如我所说,在某些IE版本中,当设置为
框大小:边框框时,它会导致填充文本字段/文本区域的一些奇怪行为。如果手动设置填充,效果很好。@charlietfl显然仍然可以访问?看见在
控制台
的同一页上尝试
jQuery().jQuery$(“机构”)。选择器@guest271314是的,但当文档中说它已被弃用时,您不能期望它在将来的版本中始终可用。我只是引用了报纸上的话docs@charlietfl看,是的,我知道
$(这个)
,但我确实需要字符串。我也不想依赖用户提供它,希望能有一个简单的方法来获得它。@Brett你也可以要求用户提供它作为
$.fn
的函数作为
$.fn.myPlugin(“#选择器”)
你的意思是不是像
$(“#选择器”)那样调用它。myPlugin()
你会那样做吗?@Brett是的,差不多。您还可以在代码末尾执行
$.myPlugin=$.fn.myPlugin
,这样就只需执行$.myPluginAlright-也许您可以使用此解决方案更新您的答案?谢谢。。。。但是得到的回报有点太多了。对于一个
输入
我得到了以下返回:
[“输入#.表单控件”,“输入#.表单控件”,“输入#.表单控件”,“输入#.表单控件”,“输入#.”]
没有更改我得到的输出;尽管我的测试场景覆盖了许多输入字段。我检查了上面的控制台和第一个输出
input
,但第二个输出
select.foo
,而不是
#form.foo
@Bret请参阅更新的帖子。另请参见,,感谢您的努力,但根据我对@vihan1086的评论,我并不想让用户将其作为参数提供。是否尝试了@dystroy的答案?尽管
.selector
被记录为已弃用,但似乎仍然可以访问;请参阅
$.fn.init
如果需要,您可以访问父级并创建选择器字符串。。。看到我的解决方案了吗?为什么不为插件特有的特定类创建CSS,然后在初始化插件时将该类添加到元素中呢?@AnthonyGrist Hmmmmm我想这是一个可能的想法。谢谢@谢谢你的链接!
$.fn.myPlugin = function () {
    var $this = this;
    var filteredElements = $this.children('a');//

    console.log(filteredElements);
} 
$('#form .class').myPlugin();
//Logs: children that are <a> of #form .class