0

更新:

我终于弄清楚为什么#output div 的内容是空的。这是因为内容是从服务器检索的,需要时间,所以在加载文档时,这个 div 的内容仍然是空的。

任何人都知道仅使用 JavaScript 或 jQuery 等(客户端编程)从延迟的 div 内容中提取信息吗?


我有一个变量,它存储一个非常大的字符串,它的内容是 html。我们称之为内容。

然后

var html = $.parseHTML(内容);

在此之后我想找到这个块(并从中提取值)

<div id="output" style="float:left;width:150px;margin:30px 0 0 1px;"><div class="result-title">Caltex/Woolworths St Kilda</div><div class="result-text">price: 152.9c<br>address: 99 Chapel St &amp; Inkerman St, St Kilda East</div><div class="result-title">BP East Prahran</div><div class="result-text">price: 152.9c<br>address: 549 High St &amp; Chatsworth Rd, Prahran</div><div class="result-title">BP Balaclava</div><div class="result-text">price: 152.9c<br>address: 308 Carlisle St &amp; Blenheim St, Balaclava</div><div class="result-title">7 Eleven St Kilda</div><div class="result-text">price: 153.9c<br>address: 154-158 St Kilda Rd &amp; Alma Rd, St Kilda</div><div class="result-title">BP AA Prahran</div><div class="result-text">price: 153.9c<br>address: 500 Malvern Rd, Prahran</div></div>

我试图遍历它,但不知道应该使用哪个属性来查找该块。

 function onS(data)
           {
               var html = $.parseHTML(data.responseText);
               $.each(html, function (i, ele) {
                   if (ele.nodeName == '#div')
                   {
                       alert('found it!!!');
                   }
               });
               alert("Data Loaded: " + data.responseText);
           }

请帮忙。

****更新:****

代码:

function onS(data)
           {
               // Niclas
               var nodes = $('#output', data.results[0]);
               alert("Data Loaded: " + nodes.html());

               //Adeneo
               var node = $(data.results[0]).find('div#output'); 
               alert("Data Loaded: " + node.html());
           }

运行时值(请查看 innerHTML),它在两种情况下都是空的。

(图片看起来太小了,可以按Ctrl+鼠标滚轮放大/缩小)

在此处输入图像描述

4

3 回答 3

0

您不必遍历所有内容。你可以像往常一样使用 jQuery 选择器:

var theNodeYoureLookingFor = $('#output', html);

这是一个愚蠢的小小提琴来演示它:http: //jsfiddle.net/RjAMw/1/

编辑:响应问题更新的更新:

您的onS函数将获取的data作为参数。data已经是 HTML 格式了,所以你需要做的就是:

var $node = $('div#output', data);
alert('Data Loaded: ' + $node.html());

从我所见,你得到的错误是因为你试图访问一个data.results不存在的数组。

于 2013-08-06T16:07:11.283 回答
0

看起来您正在使用 ajax 来获取字符串,只需将 dataType 设置为 html 就会自动为您解析它。
要在该数据中查找元素,请使用常规 DOM 遍历方法:

$.ajax({
    url : 'somewhere.php',
    dataType : 'html'
}).done(onS);

function onS(data) {
     var node = $(data).find('#div'); // or filter('#div') for root elements

     alert("Data Loaded: " + node.html());
}

如果由于某种原因您只需要迭代,看起来您正在寻找 tagName 或 id ?

$.each(html, function (i, ele) {
    ele.tagName // returns 'div', 'span' etc. often in uppercase
    ele.id // would return the id, 
           // and from the hashsign it looks like it's what you're trying to do

    ....
});
于 2013-08-06T15:59:27.137 回答
0

我终于弄明白了。

之所以div内容为空,是因为html文档加载后2-4秒后会生成#output div。因此,当触发 onS() 方法时,该 div 的内容尚未生成。

关于如何从跨域网站获取div的生成/动态/延迟内容,请参考这个问题:

如何使用 JavaScript(jQuery 等)从外部网站页面获取延迟/生成/动态内容

于 2013-08-08T04:03:07.013 回答