Как разделить <p><span> Привет </span></p> до <span>Привет </span> с использованием JavaScript - PullRequest
3 голосов
/ 29 августа 2010

Как разделить <p><span>Hello</span></p> на <span>Hello</span>, используя JavaScript

var text = "<p><span>Hello</span></p>";

помните: я не знаю, что содержит <p>, я не знаю, имеет ли <p> какой-либо атрибут или нет

Я нашел ответ!

var patt=/^<p.*?>(.*)<\/p>$/i;
var result=patt.exec(text);
alert(result[1]); 

Благодарственное кольцо0 & w3schools http://www.w3schools.com/jsref/jsref_obj_regexp.asp

но есть проблема! это не работает с

aa<p><span>Hello</span></p>aa

Ответы [ 4 ]

12 голосов
/ 29 августа 2010

Не используйте для этого строковые манипуляции, используйте DOM.

// create a dummy container div element
var tempDiv = document.createElement('div');
// insert the desired html inside this container
tempDiv.innerHTML = "<p><span>Hello</span></p>";
// find the first para, and get its html
tempDiv.getElementsByTagName("p")[0].innerHTML; // contains "<span>Hello</span>"

Попробуйте этот фрагмент .

Если вы используете фреймворк, такой как jQuery, вы можете использовать:

$("<p><span>Hello</span></p>").html()

Попробуйте этот фрагмент .

1 голос
/ 29 августа 2010

Регулярное выражение, которое заботится об удалении p атрибутов

var new = text.replace(/^<p[^>]*>(.*)<\/p>$/i, "$1");

Или версии с .*?

var new = text.replace(/^<p.*?>(.*)<\/p>$/i, "$1");

И если <pre> или <param> может запустить text, вы должны предотвратить совпадение

var new = text.replace(/^<p\b.*?>(.*)<\/p>$/i, "$1");

изменить , чтобы ответить на второй вопрос

Удалить все, что находится до / после

var new = text.replace(/^.*<p\b[^>]*>(.*)<\/p>.*$/i, "$1");

Но если вы хотите удалить все <p...> и все </p>Вы должны использовать две строки

var new = text.replace(/<p\b.*?>/ig, "");
new = text.replace(/<\/p>/ig, "");
0 голосов
/ 29 августа 2010

Заметьте, я использовал p> и </p вместо полного тега. Я не уверен, даст ли разделение массив с пустым первым индексом, если вы используете полный тег. Я слишком ленив, чтобы проверить это, учитывая довольно плохую формулировку вопроса.

var text = "<p><span>Hello</span></p>";
var foo = text.split("p>");
var bar = foo[1].split("</p");
alert(bar[0]);
0 голосов
/ 29 августа 2010

Что вы действительно хотите?

  • Вы можете извлечь это с помощью подстроки: text.substr(3, 18)
  • Вы можете использовать регулярное выражение: text.match(/<span>([^<]+)<\/span>/)
  • Вы можете вставить это DOM и разобрать его.

Вам нужно будет лучше объяснить вопрос.

...