2014-01-08 3 views
3

У меня есть raw html с некоторыми классами css внутри для различных тегов.Как удалить все атрибуты из html?

Пример:

Вход:

<p class="opener" itemprop="description">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Neque molestias natus iste labore a accusamus dolorum vel.</p> 

, и я хотел бы получить просто HTML, как:

Выходные:

<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Neque molestias natus iste labore a accusamus dolorum vel.</p> 

Я не знаю названия этих классы. Мне нужно сделать это в JavaScript (node.js).

Любая идея?

+0

почему HTML имеют эти CLAS ses - генерируется ли он из CMS или аналогичного, а если нет, может ли быть удален из источника? – AlexHighHigh

+0

Я хотел бы предложить вам изменить свой заголовок на «Как удалить все атрибуты из тега HTML?«поскольку это на самом деле не имеет ничего общего с« css-ссылками », независимо от того, что это такое. – meagar

+0

В примере' itemprop = "description" 'не является атрибутом CSS, а является свойством элемента HTML. Я бы предположил, что вы хотите посмотреть вместо HTML-парсера, поскольку атрибуты иногда необходимы для HTML-элементов (например, '' и ''). –

ответ

5

Это может быть сделано с 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[0].attribs = {};  // remove all attributes 
}); 

var html = $.html();   // get the HTML back 
+1

Отлично, это великолепно! Большое спасибо. :) –

+0

Не работает до удаления '[0]'. т. е. 'this.attribs = {};' –

+0

Я думаю, это зависит от того, что это такое, но три года назад, когда я написал это, он работал с '[0]' в Cheerio. – adeneo

1

Возможно, некоторое регулярное выражение в js может выщипывать те теги css, а затем выводить урезанную версию? thats, если я понимаю ваш вопрос, корреспондент

+2

Если вы собираетесь использовать javascript, анализ вашего HTML с помощью регулярного выражения может привести к множеству проблем и будет довольно сложным. – MattDiamant

+1

[Невозможно разобрать html с регулярными выражениями] (http://stackoverflow.com/a/1732454/7552) –

0

Возможно, просто используйте Notepad ++, и быстрое действие «Найти/заменить» с пробелом будет самым быстрым способом, вместо того, чтобы думать в синтаксическом анализаторе или что-то подобное.

+0

Что бы вы искали? – MattDiamant

+1

Вы правы Мэтт. Если ему нужно сделать это программно, и он не знает названия классов, поэтому мой подход неверен. –

+0

ответ adeneo лучший, я думаю. +1 –

4

Я бы создал новый элемент, используя имя тега и 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 
+1

Как вы создаете элементы без DOM, это Node? – adeneo

+0

Спасибо, это решение на самом деле ваше, так что спасибо! :) –

0

импровизировать это:

$('.some_div').each(function(){ 
    class_name = $(this).attr('class'); 
    $(this).removeClass(class_name)}) 
+1

Это jQuery? – adeneo

+0

да это jQuery. –

+1

На сервере? – adeneo

0

В питона, сделайте так, но предоставить список файлов и тегов, вместо жесткого закодированных из них, а затем завернуть в цикле:

#!/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) 

Скорее всего, это может быть легко переведен на JavaScript для nodejs

+0

Вопрос задан для скрипта node.js, а не для python :-) – Bergi

0

Вы можете динамически анализировать элементы, используя парсер DOM (или SAX, в зависимости от того, что вы хотите), и удалять все атрибуты стиля.

На JavaScript вы можете использовать метод HTML DOM removeAttribute().

<script> 
    function myFunction() 
    { 
    document.getElementsByClassName("your div class")[0].removeAttribute("style"); 
}; 
</script> 
+0

Не могли бы вы предоставить простой пример (JavaScript)? –

+0

Отвечено обновлено. :) –

0

я обеспечиваю сторону клиента (браузер) версии, этот ответ пришел, когда я гугл удалить 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); 
    }); 
} 
Смежные вопросы