JQuery 和 frame(set) - 为什么它们会消失
JQuery and frame(set)s - why do they disappear?
当我使用控制台并尝试使用标记框架集创建元素时,我没有得到任何结果:
$('<div id="content" data-something="hello" />')
=> [<div id="content" data-something="hello"></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"(例如)属性,而无需自己构建解析器?
附言(如果你想知道我为什么使用框架)这一行(或像这样的一行)是来自外部(或多或少)API 的响应,我无法更改。我只想阅读信息并继续。
frameset
标记将用作框架文档的正文,以代替body
标记,并与frameset
文档类型声明结合使用。自HTML5以来,它被认为是过时的。
要解决您的问题,最好的办法是自行解析字符串中所需的部分,或使用 HTML 解析库(如 htmlparser.js
框架集元素上的属性不是有效的 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"替换为另一个属性的名称即可获取其值。简单。
我使用了一个解决方法:
var sourceWithFrames = ...
sourceWithFrames = sourceWithFrames.replace(/<frame/g, '<xyzFrame')
// e.g.
var frameborder = $(sourceWithFrames).find('xyzFrameset').attr('frameborder')
// and so on
在我看来,这是解决这个问题的最好方法(也可能是唯一一种方法......
相关文章:
- 为什么js事件消失了
- 为什么我的HTML标签消失了
- 声音会逐渐消失,但不会逐渐消失——为什么
- 为什么这个对象会消失
- 为什么 Javascript 中的类变量在尝试多次调用它们或将它们分配给局部变量时会消失
- 标题下方的标签在再次单击时消失,JavaScript不知道为什么
- JQuery 和 frame(set) - 为什么它们会消失
- 为什么回发时控件消失
- 为什么我的球消失了
- 为什么当我在 jQuery 中添加切换事件时我的按钮消失了
- 为什么当我对其父元素进行动画处理时,我的 UL 消失了
- 为什么按钮在第一次单击时没有响应,以及为什么菜单在缩减到桌面时消失
- 为什么我必须在IE中单击选择框选项两次才能使其消失
- 为什么我的网页上这个UL的链接和文本消失了
- 为什么AJAX的返回值几乎立即消失
- 为什么当用户单击背景时,我的jQuery Mobile页脚会出现然后消失
- 为什么缩进从我的网站上的用户提交中消失
- 为什么我的html img突然消失了,我需要清除缓存
- 为什么显示在其他地方的引导程序输入会立即消失
- 在JavaScript onClick中:为什么笔划出现然后消失