gpt4 book ai didi

Javascript:架构资源管理器 Chrome 扩展循环需要忽略不相关的嵌套元素

转载 作者:行者123 更新时间:2023-11-28 02:44:59 27 4
gpt4 key购买 nike

这应该对于 Javascript 专家来说很容易

对于那些不知道架构是什么 ( http://schema.org ) 的人来说,这是搜索引擎读取网页内容的一种新方式。它的工作原理是用特定标签标记相关数据。

对于那些确实知道它是什么的人,这里有一个 chrome 扩展 ( Schema Explorer ),可以轻松检查数据在页面上的样子。请参阅示例。

现在:扩展存在一个小问题,即 by 不会跳过/忽略空嵌套元素。这里有两个例子:第一个工作完美,但是,第二个炸弹因为 <div> 是空的。标签:

第一个示例有效:

<div itemscope="" itemtype="http://schema.org/Movie">
<h1 itemprop="name">Avatar</h1>
<div itemprop="director" itemscope="" itemtype="http://schema.org/Person">
Director: <span itemprop="name">James Cameron</span> (born <span itemprop="birthDate">August 16, 1954</span>)
</div>
<span itemprop="genre">Science fiction</span>
<a href="http://pierreloicdoulcet.fr/movies/avatar-theatrical-trailer.html" itemprop="trailer">Trailer</a>
</div>

秒示例给出了问题:

<div itemscope="" itemtype="http://schema.org/Movie">
<div>
<h1 itemprop="name">Avatar</h1>
<div itemprop="director" itemscope="" itemtype="http://schema.org/Person">
Director: <span itemprop="name">James Cameron</span> (born <span itemprop="birthDate">August 16, 1954</span>)
</div>
<span itemprop="genre">Science fiction</span>
<a href="http://pierreloicdoulcet.fr/movies/avatar-theatrical-trailer.html" itemprop="trailer">Trailer</a>
</div>
</div>

我查看了该扩展,实际上它与一个 javascript 文件很好地组合在一起,完成了大部分工作。下面是执行循环的代码,但是它需要能够跳过空嵌套元素,并且总体上可能更加健壮:

    var __explore = function(node, parentData)
{
if (parentData === null || parentData === undefined)
{
parentData = __dataTree;
}
if (node.getAttribute)
{
var isItemScope = node.getAttribute('itemscope');
var hasItemProp = node.getAttribute('itemprop');
var itemtype = node.getAttribute('itemtype');


var childs = node.childNodes;

var i = 0;

var tmp = new Array();

while (i < childs.length)
{
if (isItemScope !== null)
__explore(childs[i], tmp);
else
__explore(childs[i], null);
++i;
}

if (isItemScope !== null)
{
parentData.push({name : 'scope', value : hasItemProp, type : itemtype, childs : [tmp], node : node});
}
else if (hasItemProp && parentData)
{
parentData.push({name : hasItemProp, value : node.innerText});
}
}
}

这是 contentscript.js 的完整版本https://gist.github.com/3413475

希望有人能帮助我解决这个问题。根据记录,我已经联系了作者,但他正忙于处理更紧急的事情。

最佳答案

我让它按预期工作:http://jsfiddle.net/vyrvp/1/但我必须承认这有点hackish。此代码可能需要更多重构才能使其适用于所有情况并使其可读。

关于Javascript:架构资源管理器 Chrome 扩展循环需要忽略不相关的嵌套元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12050906/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com