繁体   English   中英

使用jQuery将事件附加到平面ajax响应html

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM