目标:将一个keydown事件处理程序附加到一个可信任的跨度,该跨度是一个可信任的div的子级.
问题:如果您键入跨度,则触发父事件而不是子项.我想要的是孩子触发所以我可以抓住文本.我只想要那个有满足感的孩子,因为会有很多孩子.
HTML/JS在下面,小提琴链接在这里:http://jsfiddle.net/aBYpt/4/
<div class="parent" contenteditable="true">
Parent div text.
<span class="child" contenteditable="true">First child span text.</span>
<span class="child" contenteditable="true">Second child span text.</span>
<span class="child" contenteditable="true">Third child span text.</span>
</div>
<div id="console"></div>
Run Code Online (Sandbox Code Playgroud)
$(document).on( 'keyup', '.parent', function() {
$('#console').html( 'Parent keyup event fired.' );
//do stuff
});
$(document).on( 'keyup', '.child', function() {
$('#console').html( 'Child keyup event fired.' );
//do stuff
});
Run Code Online (Sandbox Code Playgroud)
**注意:事件处理委托给文档,因为元素是动态添加的.
如果先前已选择了元素,则此代码片段将从缓存中返回元素,或者选择,缓存并返回元素.它对于更新从未显着改变的元素的内容(即,用户看到的计数器的父级,其中数字改变但父级不改变)是有用的.代码如下:
var $$ = (function() {
var cache = {};
return (function (selector) {
return cache[selector] || ( cache[selector] = jQuery (selector) );
});
})();
Run Code Online (Sandbox Code Playgroud)
您可以像这样使用它:
$$('#id')
现在......这是怎么回事?如何$$访问jQuery选择器?它与$$开始无关$,你也可以这么做var foo.如何$$映射传递给它的内容selector.我希望看到var selector = argumentName里面$$.另外,对我来说似乎没有$$设置接收参数(例如,函数(输入){}),但它很容易吗?
这段小代码让我感到非常困惑,一些清晰度将会非常受欢迎.谢谢!