我有一个想要解析标签的ajax响应,我只想在特定的div id中查找脚本标签。下面将捕获并运行页面中的每个javascript:
success: function(data) {
var dom = $(data);
dom.filter('script').each(function(){
var obj = $(this);
$('#my_div').append(obj);
});
},当我尝试先按div id过滤,然后再按脚本过滤时,它没有附加任何东西。显然,我可以访问响应html,并且我可以看到'js_outer_div‘目录中应该有多个标记:
var dom = $(data);
dom.filter('js_outer_div').filter('script').each(function(){
var obj = $(this);
$('#my_div').append(obj);
});不幸的是,我无法控制响应html。有没有办法像我想要的那样先按div过滤,再按脚本过滤?
编辑:示例html响应:
...
<div id="i9-content-div">
<script xmlns:efactions="http://www.enginframe.com/2009/efactions" xmlns:grid="http://www.enginframe.com/2000/GRID" type="text/javascript">
...
</script>
<script type="text/javascript">
...
</script>
</div>发布于 2015-07-09 05:51:29
我可以看到在'js_outer_div‘目录中应该有多个标签
如果js_outer_div是一个类名,那么filter方法应该是:
dom.filter('.js_outer_div')...但是不,这并不能解决问题。filter方法筛选集合中的顶级元素。jQuery集合不是平面的,它保留了元素的层次结构。您应该使用find方法。当find方法选择集合中包装器元素的后代时,您可以生成一个div元素,并使用html方法通过data变量设置它的内容。现在,无论目标div.js_outer_div是不是顶级元素,find方法都可以工作。
$('<div/>').html(data).find('.js_outer_div script').each(...)发布于 2015-07-09 05:51:42
您可以使用find而不是filter。
var dom = $(data);
dom.find('js_outer_div script').each(function(){
var obj = $(this);
$('#my_div').append(obj);
});这实际上不会选择任何东西,除非你在某个地方有一个<js_outer_div>标签。您可能需要在find语句中将js_outer_div更改为.js_outer_div或#js_outer_div。
https://stackoverflow.com/questions/31304376
复制相似问题