3

当我使用控制台并尝试使用标签框架集创建元素时,我没有得到任何结果:

$('<div id="content" data-something="hello" />')
=> [<div id=​"content" data-something=​"hello">​&lt;/div>​]
$('<frameset frameborder="0" framespacing="0" marginwidth="0" marginheight="0" framespacing="0" border="0"></frameset>')
=> []

此行为在多个 JQuery 版本(如 1.10.2、2.0.0 和 1.2.6 等)中持续存在

如何从该框架集中读取“frameborder”(例如)属性,而无需自己构建解析器?

PS(如果你想知道我为什么使用框架)这条线(或类似的线)是来自外部(或多或少)API 的响应,我无法更改。我只想阅读信息并继续。

4

3 回答 3

1

标记将frameset用作框架文档的主体来代替body标记,并与frameset文档类型声明结合使用。自 HTML5 以来,它被认为已过时


要解决您的问题,最好的办法是自己从字符串中解析您需要的部分,或者使用 HTML 解析库,例如htmlparser.js

于 2013-11-05T18:14:42.497 回答
0

我使用了一种解决方法:

var sourceWithFrames = ...
sourceWithFrames = sourceWithFrames.replace(/<frame/g, '<xyzFrame')
// e.g. 
var frameborder = $(sourceWithFrames).find('xyzFrameset').attr('frameborder')
// and so on

在我看来,这是解决这个问题的最佳方法(可能是唯一的方法......)

于 2013-11-06T23:39:23.710 回答
0

框架集元素上的属性不是有效的 HTML,因此 jQuery 不会创建它。如果你把它们拿出来,它会起作用。然后,您可以使用 一次添加一个属性.attr

var x = $('<frameset></frameset>');
x.attr('frameborder', '0');
x.attr('framespacing', '0');
x.attr('border', '0');  

但是创建元素所增加的代码和资源成本并不是仅仅为了在字符串中找到一个属性值所必需的。您可以使用 match 方法找到您要查找的子字符串,如下所示:

var frameborder = '<frameset frameborder="0" border="0"></frameset>'.match(/frameborder="(.+?)"/)[1]

只需将正则表达式中的“frameborder”替换为另一个属性的名称即可获取其值。简单的。

于 2013-11-05T18:32:16.030 回答