[英]Attaching events to flat ajax response html with jquery
在我们拥有的应用程序中,我们正在执行一些AJAX响应。 有时,我们会得到以下代码中未完全包含测试3的响应。 尽管有可能击败人们屈服,但我想在代码中加入一些皮带和吊带来处理案件。
关键是findself()函数,该函数旨在通过$('... html ...')字符串获取任何响应html块,然后对其进行适当的处理。 在某些情况下只能找到这种方法,但是在第3种情况下,它在浏览器中死于getAttribute错误。
关于如何扩展findself()函数以处理案例3的任何好主意?
var html;
function findself(sel, html) {
return html.is(sel) ? html.find(sel).add(h) : html.find(sel);
}
html = $('<span rel="toggle">foo</span>');
findself('[rel="toggle"]', html).each(function () {
console.log('ok 1');
});
console.log('done case 1');
findself('[rel="toggle"]', $('testing of a text node')).each(function () {
console.log('ok 2');
});
console.log('done case 2');
html = $('<span>foo</span>some text<div rel="toggle">xx</div>');
findself('[rel="toggle"]', html).each(function () {
console.log('ok 2');
});
console.log('done case 3');
快速版本:您可以通过确保text元素不在2个元素之间并且不在根目录中来避免当前问题,如下所示:
function findself(sel, html) {
var h = $("<div />").append(html);
return h.is(sel) ? h.find(sel).add(h) : h.find(sel);
}
说明:这是jQuery核心中的错误。 由于打开/关闭标签,它检测为HTML字符串,但它不是单个元素。 它是3个节点,一个是文本,由于检测不正确,因此将其错误地视为元素字符串,而不是子元素集合,例如:
jQuery.filter('[rel="t"]', $('<span>foo</span>some text')); //works
jQuery.filter('[rel="t"]', $('<div><span>foo</span>some text</div>')); //works
jQuery.filter('[rel="t"]', $('<span>foo</span>text<div>xx</div>')); //fails
所以目前, jquery.filter()
其中.is()
使用)不会在中间文本节点工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.