怎么取出字符串中body中的html内容和body中的属性?

Henry.6 2011-12-01 03:01:28
字符串如下:

var str='<body bgColor="#f98405" background="" style="font-size:10pt;font-family:NSimSun;margin:2px;"><div>正文</div></body>'
...全文
367 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
persuit666 2011-12-02
  • 打赏
  • 举报
回复
可以动态创建个iframe吧,设置iframe的地址为空文档aa.html,然后取得iframe窗口的句柄
js获取内容不行吗?
比如var f=document.createElement('IFRAME')
f.src='aa.html'
f.name='ff'
f.onload=function(){window.frames['ff'].document.write("这里是你的那个内容");}
document.body.appendChild(f);

function getHTML(){ window.frames['ff'].document.body.// ...这里处理你要的数据}


Legend1988 2011-12-02
  • 打赏
  • 举报
回复
不用,6楼是对的。[Quote=引用 8 楼 ohmysee 的回复:]

引用 5 楼 ohmysee 的回复:

具体还要看需要啊,如果只考虑较新的浏览器,IE9 Chrome FireFox等的话利用document.body.attributes集合可以获取设置过的属性集合。但是IE8,IE7就蛋疼了,它们会把所用支持的属性都放在里面不管你有没有设置。

while(tmp =reg.exec(str_attr)) {
attrs[tmp[1]……
[/Quote]
Henry.6 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zhoufeng0401 的回复:]
可以动态创建个iframe吧,设置iframe的地址为空文档aa.html,然后取得iframe窗口的句柄
js获取内容不行吗?
比如var f=document.createElement('IFRAME')
f.src='aa.html'
f.name='ff'
f.onload=function(){window.frames['ff'].document.write("这里是你……
[/Quote]
实现不了吧。我以前就这个思路的,不能实现。
Henry.6 2011-12-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ohmysee 的回复:]
具体还要看需要啊,如果只考虑较新的浏览器,IE9 Chrome FireFox等的话利用document.body.attributes集合可以获取设置过的属性集合。但是IE8,IE7就蛋疼了,它们会把所用支持的属性都放在里面不管你有没有设置。
[/Quote]
不是采集,这个数据是从数据库中取出来的
ohmysee 2011-12-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ohmysee 的回复:]

具体还要看需要啊,如果只考虑较新的浏览器,IE9 Chrome FireFox等的话利用document.body.attributes集合可以获取设置过的属性集合。但是IE8,IE7就蛋疼了,它们会把所用支持的属性都放在里面不管你有没有设置。
[/Quote]
while(tmp =reg.exec(str_attr)) {
attrs[tmp[1]] = tmp[3];
}
这一段有点问题,exec不会移到下次匹配位置的呀???


//应该这样啊
while(tmp =reg.exec(str_attr)) {
attrs[tmp[1]] = tmp[3];
str_attr=RegExp.rightContext;
}
ohmysee 2011-12-01
  • 打赏
  • 举报
回复
接上
实际上现在关于样式的标签属性都由CSS接管了。
像body这样元素除了设置cssStyle的style和class属性外没什么其它属性需要设置。
超链 a 常用属性:href target title style class
图片 img 常用属性:src alt title style class
等等.....
sohighthesky 2011-12-01
  • 打赏
  • 举报
回复
<script>
var str='<body bgColor="#f98405" background="" style="font-size:10pt;font-family:NSimSun;margin:2px;"><div>正文</div></body>'
var mats = str.match(/<body([^>]*)>(.*?)<\/body>/);
var text = mats[2];
var str_attr = mats[1];
var reg = /(\w+)\s*=\s*(["']?)(.*?)\2/g, tmp, attrs = {};
while(tmp =reg.exec(str_attr)) {
attrs[tmp[1]] = tmp[3];
}
console.log(text);
console.log(attrs);
console.log(attrs.bgColor);
</script>
ohmysee 2011-12-01
  • 打赏
  • 举报
回复
具体还要看需要啊,如果只考虑较新的浏览器,IE9 Chrome FireFox等的话利用document.body.attributes集合可以获取设置过的属性集合。但是IE8,IE7就蛋疼了,它们会把所用支持的属性都放在里面不管你有没有设置。
ohmysee 2011-12-01
  • 打赏
  • 举报
回复
点击查看示例
window.onload = function () {
var rg = new RegExp("^<body([^<]*)>(.*)</body>$", "i"),
rgAtt = new RegExp("([a-z]+)\\s*=\\s*([\"'])([^\"']*)\\2", "i");
var str = '<body bgColor="#f98405" background="" style="font-size:10pt;font-family:NSimSun;margin:2px;"><div>正文</div></body>';
var match = rg.exec(str);
if (match && match.length == 3) {
//ok
var attStr = match[1],
contentHtml = match[2],
divC = document.getElementById("c");
divC.appendChild(document.createTextNode("内容:\n" + contentHtml + "\n\n属性:\n"));
while (rgAtt.test(attStr)) {
divC.appendChild(document.createTextNode(RegExp.$1 + " : " + RegExp.$3 + "\n"));
attStr = RegExp.rightContext;
}
}
}
  • 打赏
  • 举报
回复
内容如果比较少,可以用正则,但如果内容较多,情况比较复杂,就应该考虑采集时的方式。好的方法是直接在采集时利用DOM关系进行采摘。给个提示,自己去琢磨吧。
ohmysee 2011-12-01
  • 打赏
  • 举报
回复
[URL=http://www.ohmysee.com/PublicFile/WebDesign/学习日志/Javascript%20正则表达式%20%20取出字符串中body中的html内容和body中的属性.htm]这是示例[/URL]

window.onload = function () {
var rg = new RegExp("^<body([^<]*)>(.*)</body>$", "i"),
rgAtt = new RegExp("([a-z]+)\\s*=\\s*([\"'])([^\"']*)\\2", "i");
var str = '<body bgColor="#f98405" background="" style="font-size:10pt;font-family:NSimSun;margin:2px;"><div>正文</div></body>';
var match = rg.exec(str);
if (match && match.length == 3) {
//ok
var attStr = match[1],
contentHtml = match[2],
divC = document.getElementById("c");
divC.appendChild(document.createTextNode("内容:\n" + contentHtml + "\n\n属性:\n"));
while (rgAtt.test(attStr)) {
divC.appendChild(document.createTextNode(RegExp.$1 + " : " + RegExp.$3 + "\n"));
attStr = RegExp.rightContext;
}

}
}
三石-gary 2011-12-01
  • 打赏
  • 举报
回复
这个应该要用正则。。坐等正则高手

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧