Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以向jQuery动态添加新的:输入?_Jquery - Fatal编程技术网

是否可以向jQuery动态添加新的:输入?

是否可以向jQuery动态添加新的:输入?,jquery,Jquery,我添加了一些不属于标准HTML输入元素的输入元素。例如,我有一个“精确定位图像”,您可以通过单击它来放置“PIN”。此图像由以下HTML代码定义: <div class="pinpoint"> <img src="..." alt="" title="" maxpins="10" /> </div> 隐藏所有输入,包括我的pinpoint图像。测试标记的正则表达式在闭包中定义为变量,因此在不修改jQuery的情况下无法更改它们,这将是一个非常糟糕的主

我添加了一些不属于标准HTML输入元素的输入元素。例如,我有一个“精确定位图像”,您可以通过单击它来放置“PIN”。此图像由以下HTML代码定义:

<div class="pinpoint">
    <img src="..." alt="" title="" maxpins="10" />
</div>

隐藏所有输入,包括我的pinpoint图像。

测试标记的正则表达式在闭包中定义为变量,因此在不修改jQuery的情况下无法更改它们,这将是一个非常糟糕的主意

而且,更重要的是,依赖于
:input
选择器的现有或未来代码可能非常合理地依赖于它通常是什么。打破他们的假设似乎是另一个坏主意

但你有干净的解决办法

例如,可以定义字符串常量:

var inputs = ':input,.pinpoint';
允许你做

$(inputs).hide()

正如@dystroy提到的,更改jQuery源代码通常不是一个好主意,您可以使用IDE的查找和替换功能来更改所有选择器。但是,如果您有更改选择器的合理需要,则可以操纵源。jQuery使用sizzle引擎选择元素,您可以修改:

IE8及以下版本不支持
Array.prototype.indexOf

多亏@RajaprabhuAravindasamy发表了一篇评论,经过一些研究,我发现了如何通过重载
:input
选择器来实现这一点:

$.extend($.expr[':'], {
    input: function(elem) {
        return /input|select|textarea|button/i.test(elem.nodeName) || 
               $(elem).is('div.pinpoint');
    }
});
animated=function (a){return c.grep(c.timers,function(b){return a===b.elem}).length}
button=function (g){return"button"===g.type||g.nodeName.toLowerCase()==="button"}
checkbox=function (g){return"checkbox"===
g.type}
checked=function (g){return g.checked===true}
disabled=function (g){return g.disabled===true}
empty=function (g){return!g.firstChild}
enabled=function (g){return g.disabled===false&&g.type!=="hidden"}
file=function (g){return"file"===g.type}
has=function (g,h,k){return!!o(k[3],g).length}
header=function (g){return/h\d/i.test(g.nodeName)}
hidden=function (a){var b=a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"}
image=function (g){return"image"===g.type}
input=function (g){return/input|select|textarea|button/i.test(g.nodeName)}
parent=function (g){return!!g.firstChild}
password=function (g){return"password"===g.type}
radio=function (g){return"radio"===g.type}
reset=function (g){return"reset"===g.type}
selected=function (g){return g.selected===true}
submit=function (g){return"submit"===g.type}
text=function (g){return"text"===g.type}
visible=function (a){return!c.expr.filters.hidden(a)}
了解哪些是默认伪类选择器表达式的另一个有趣链接是,您可以在其中找到我用来更新自定义
:input
选择器的列表:

$.extend($.expr[':'], {
    input: function(elem) {
        return /input|select|textarea|button/i.test(elem.nodeName) || 
               $(elem).is('div.pinpoint');
    }
});
animated=function (a){return c.grep(c.timers,function(b){return a===b.elem}).length}
button=function (g){return"button"===g.type||g.nodeName.toLowerCase()==="button"}
checkbox=function (g){return"checkbox"===
g.type}
checked=function (g){return g.checked===true}
disabled=function (g){return g.disabled===true}
empty=function (g){return!g.firstChild}
enabled=function (g){return g.disabled===false&&g.type!=="hidden"}
file=function (g){return"file"===g.type}
has=function (g,h,k){return!!o(k[3],g).length}
header=function (g){return/h\d/i.test(g.nodeName)}
hidden=function (a){var b=a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"}
image=function (g){return"image"===g.type}
input=function (g){return/input|select|textarea|button/i.test(g.nodeName)}
parent=function (g){return!!g.firstChild}
password=function (g){return"password"===g.type}
radio=function (g){return"radio"===g.type}
reset=function (g){return"reset"===g.type}
selected=function (g){return g.selected===true}
submit=function (g){return"submit"===g.type}
text=function (g){return"text"===g.type}
visible=function (a){return!c.expr.filters.hidden(a)}

是的,我知道,但我使用的是继承的代码,有数百个地方我必须这样做。如果我可以使用“输入”,这将大大节省时间和错误selectors@Ivan当然您的IDE具有查找和替换功能?是的,但正如您所知,查找和替换很容易出错:)无论如何,我已经找到了这样做的方法。谢谢。这对你有帮助吗。?非常有趣的是@RajaprabhuAravindasamy,本文解释了如何添加新的伪选择器,但没有说明如何重载现有的选择器。我会研究一下。请看一下我自己的答案。严格来说,没有必要修改jQuery源代码。