Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从html中删除所有属性?_Javascript_Html_Node.js_Text Processing_Text Parsing - Fatal编程技术网

Javascript 如何从html中删除所有属性?

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

我有一些原始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 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);
    });
}