JQuery,非贪婪和非dom元素

时间:2014-08-16 07:14:35

标签: jquery

我有一些html通过Ajax调用返回,让我们假设它的大小为10K。我需要查看前20个字符并获取其中的内容

e.g。像这样的文件

var myDoc = "<span class=MyClass>text</span><div>...

理想情况下,我可以这样做

$("span.MyClass", myDoc, nonGreedy)

这意味着看看myDoc而不是dom,不要贪婪(在reg exp术语中)但是在你找到第一个实例的那一刻停止看

这可能吗? jQuery可以在随机文本而不是dom上运行吗?

我不知道jQuery内部是如何工作的,所以我不知道它是否首先评估整个dom,如果非贪婪是一个在这里有意义的概念?

我将陈述显而易见的,我可以使用indexOf在普通的javascript中轻松地做到这一点,我想知道jQuery可以做什么。

有什么想法吗?

由于

2 个答案:

答案 0 :(得分:1)

jQuery不能这样做“非贪婪”,因为它只解析HTML字符串的一部分,它会解析传递给它的所有内容,但通常这不是问题,因为你正在使用保存在内存中的变量,而且速度非常快。

这样做的方法是创建一个DOM元素,将该元素的内容设置为从ajax调用中获取的HTML,然后找到第一个span元素

var firstSpan = $('<div />', {html : myDoc}).find('span.MyClass:first');

另一种选择是在前20个字符处剪切字符串,例如myDoc.substr(0,20),但是没有办法知道这是否为您提供有效的HTML,如果没有,您将得到一个从jQuery解析错误,所以这不是一个好主意。

答案 1 :(得分:1)

尝试

var span = $(myDoc.slice((myDoc.match(/<span class=MyClass>/)).index)).eq(0);

jsfiddle http://jsfiddle.net/guest271314/xLrdxk93/