Javascript JQuery和frame(set)s-为什么它们会消失?

Javascript JQuery和frame(set)s-为什么它们会消失?,javascript,jquery,html,frames,frameset,Javascript,Jquery,Html,Frames,Frameset,当我使用控制台并尝试使用tag frameset创建元素时,没有得到任何结果: $('<div id="content" data-something="hello" />') => [<div id=​"content" data-something=​"hello">​</div>​] $('<frameset frameborder="0" framespacing="0" marginwidth="0" marginheight="0" f

当我使用控制台并尝试使用tag frameset创建元素时,没有得到任何结果:

$('<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,我无法更改。我只想阅读信息并继续。

框架集标记将用作框架文档的主体,而不是
主体
标记,并与。它是



为了解决您的问题,您最好自己从字符串中解析所需的部分,或者使用HTML解析库,例如

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

var x = $('<frameset></frameset>');
x.attr('frameborder', '0');
x.attr('framespacing', '0');
x.attr('border', '0');  
var x=$('');
x、 attr('frameborder','0');
x、 attr('framespace','0');
x、 属性('border','0');
但是,创建元素所增加的代码和资源成本并不是仅在字符串中查找属性值所必需的。您可以使用以下match方法查找要查找的子字符串:

var frameborder = '<frameset frameborder="0" border="0"></frameset>'.match(/frameborder="(.+?)"/)[1]
var frameborder=''.match(/frameborder=“(.+?)”/)[1]
只需将正则表达式中的“frameborder”替换为另一个属性的名称即可获得其值。很简单。

我使用了一种解决方法:

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

SoopeHyFrase= SooSeCuffFrase.替换(/<代码> )只能是根级元素.考虑解析为XML .看起来它仅用属性失败,没有线索.进一步看,省略属性使得jQuery使用一个快速调用路径>代码> CureTeleMeNe()
直接,成功。调用
buildFragment()
的慢路径失败。根本原因:
var e=document.createElement('div'))不幸的是,这个API是如此陈旧/破译/坏编码,我甚至不能解析它作为XML,因为它使用“FrimeSePin”属性两次。我可以考虑的解决办法只是用“XYZ”替换“框架”,希望它不会影响任何东西,但标签。要清楚,浏览器不。创建它,而不是jquery。jquery只是将它传递给正确的浏览器方法。我说过我不想编写自己的解析器。这基本上就是这么做的。我已经提交了对这个问题的答案。我将使用这个解决方案。虽然我很欣赏你的帖子,但我的问题更直接地指向“解决”这个问题,而不是关于为什么会发生这种情况的答案,当然知道这仍然是件好事。谢谢,回顾一下我自己的解决方案,以下是答案:@Danyel是的,我很抱歉,我有一个编辑过的版本在这里等待,我只是在离开之前没有保存它。这种解决方法使用regex间接地搜索和替换不需要的substring,以便使用更多的函数最终找到所需的子字符串。可以直接使用正则表达式在一行中找到所需的子字符串,如:var frameborder=sourceWithFrames.match(/frameborder=“(.+?)”/)[1]Boric,这种方法的问题是,我无法在帧上使用CSS选择器,因此无法下降到可能的其他帧,或者选择具有特定属性的帧并从该帧读取另一个属性。例如,如果我需要选择器
$('frame[frameborder=0]')。attr('width'))
,我将如何使用您的方法来实现这一点?我更喜欢我的变通方法,因为尽管它是一种肮脏的黑客行为,但它仍然让我感觉到jQuery的舒适性,并且不必编写解析器。