Javascript 如何从html中删除所有属性?
我有一些原始html,里面有一些css类,用于各种标记 例如: 输入:Javascript 如何从html中删除所有属性?,javascript,html,node.js,text-processing,text-parsing,Javascript,Html,Node.js,Text Processing,Text Parsing,我有一些原始html,里面有一些css类,用于各种标记 例如: 输入: <p class="opener" itemprop="description">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Neque molestias natus iste labore a accusamus dolorum vel.</p> Lorem ipsum door sit amet,Concetetur ad
<p class="opener" itemprop="description">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Neque molestias natus iste labore a accusamus dolorum vel.</p>
Lorem ipsum door sit amet,Concetetur adipising elit。自然的痣是一种累赘
我希望得到简单的html,比如:
输出:
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Neque molestias natus iste labore a accusamus dolorum vel.</p>
Lorem ipsum door sit amet,Concertetur adipising elit。自然的痣是一种累赘
我不知道这些班级的名字。我需要在JavaScript(node.js)中完成这项工作
有什么想法吗?也许js中的一些正则表达式可以去掉那些css标记,然后输出精简版本?如果我理解了你的问题,那么使用记事本+,用空格快速“查找/替换”将是最快的方法,而不是在解析器或类似的东西中思考。我将使用标记名和该元素的
innerHTML
创建一个新元素。然后,您可以用新的元素替换旧的元素,或者使用newEl
执行任何您喜欢的操作,如下面的代码所示:
// Get the current element
var el = document.getElementsByTagName('p')[0];
// Create a new element (in this case, a <p> tag)
var newEl = document.createElement(el.nodeName);
// Assign the new element the contents of the old tag
newEl.innerHTML = el.innerHTML;
// Replace the old element with newEl, or do whatever you like with it
//获取当前元素
var el=document.getElementsByTagName('p')[0];
//创建一个新元素(在本例中为标记)
var newEl=document.createElement(el.nodeName);
//为新元素指定旧标记的内容
newEl.innerHTML=el.innerHTML;
//用newEl替换旧元素,或者用它做任何你喜欢的事情
即兴创作:
$('.some_div').each(function(){
class_name = $(this).attr('class');
$(this).removeClass(class_name)})
在python中,这样做,但提供一个文件和标记列表,而不是硬编码的文件和标记列表,然后封装在for循环中:
#!/usr/bin/env python
# encoding: utf-8
import re
f=open('fileWithHtml','r')
for line in f.readlines():
line = re.sub('<p\s(.*)>[^<]', '<p>', line)
print(line)
#/usr/bin/env python
#编码:utf-8
进口稀土
f=打开('fileWithHtml','r')
对于f.readlines()中的行:
line=re.sub('[^您可以使用DOM(或SAX,取决于您想做什么)解析器动态解析元素,并删除满足的所有样式属性
在JavaScript上,可以使用HTML DOM removeAttribute()方法
函数myFunction()
{
document.getElementsByClassName(“您的div类”)[0]。removeAttribute(“样式”);
};
如我在评论中所述,这可以通过Cheerio来完成。
要删除所有元素上的所有属性,请执行以下操作:
var html = '<p class="opener" itemprop="description">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Neque molestias natus iste labore a accusamus dolorum vel.</p>';
var $ = cheerio.load(html); // load the HTML
$('*').each(function() { // iterate over all elements
this.attribs = {}; // remove all attributes
});
var html = $.html(); // get the HTML back
var html=”Lorem ipsum door sit amet,concetetur adipising elit.Neque molestias natus iste labor a accusamus dolorum vel.
”;
var$=cheerio.load(html);//加载html
$('*')。每个(函数(){//迭代所有元素
this.attribs={};//删除所有属性
});
var html=$.html();//返回html
我正在提供客户端(浏览器)版本,因为当我在谷歌上搜索删除HTML属性时,这个答案出现了:
// grab the element you want to modify
var el = document.querySelector('p');
// get its attributes and cast to array, then loop through
Array.prototype.slice.call(el.attributes).forEach(function(attr) {
// remove each attribute
el.removeAttribute(attr.name);
});
作为一项功能:
function removeAttributes(el) {
// get its attributes and cast to array, then loop through
Array.prototype.slice.call(el.attributes).forEach(function(attr) {
// remove each attribute
el.removeAttribute(attr.name);
});
}
为什么HTML有这些类?它是由CMS或类似的类生成的,如果不是,它可以从源代码中删除吗?我建议您将标题改为“如何从HTML标记中删除所有属性?”因为它实际上似乎与“css引用”无关,无论这些引用是什么。在示例中itemprop=“description”
不是CSS属性,而是HTML元素属性。我想您应该寻找某种类型的HTML解析器,因为属性有时是HTML元素所必需的(例如
和
)。您需要一个HTML解析器,将该字符串转换为节点并对其进行解析,类似于itemprop
的内容不是css类。您只是想删除所有属性吗?另外,有些类可能不仅用于CSSHow,您是否创建了没有DOM的元素,这是节点?谢谢,这个解决方案实际上是您的,所以谢谢!)如果你打算使用javascript,用正则表达式解析HTML可能会导致很多问题,而且会相当复杂。你的搜索结果会是什么?你是对的,Matt。如果他需要通过编程来完成,但他不知道类的名称,那么我的方法是不正确的。我认为adeneo的答案是更好的答案。+1谢谢,但是什么t现在可以工作了——它必须是JavaScript(最好的node.js程序)。无需在服务器端执行。客户端在某些事件上执行此操作,例如在加载/更改容器中的数据后。将事件绑定到正文。但问题是专门标记了node.js,为什么您认为它甚至会发送到浏览器?您可以使用针对node.js的ChereIO=jQuery api实现来执行此操作。很好的提示,谢谢!但我不知道“.some_div”这个问题问的是node.js脚本,而不是python:-)你能提供简单的示例(JavaScript)吗?很好,这太棒了!非常感谢。:)在删除[0]
之前不起作用。例如,this.attribs={}
我想这取决于这个是什么,但三年前当我写这篇文章时,它确实在Cheerio中使用了[0]
。@CarsonIp是的,删除[0]就可以了,太好了,谢谢
function removeAttributes(el) {
// get its attributes and cast to array, then loop through
Array.prototype.slice.call(el.attributes).forEach(function(attr) {
// remove each attribute
el.removeAttribute(attr.name);
});
}