如果我有这样的文字;
<p> </p>
<p>this is the real text</p>
<p> </p>
<p>more</p>
我需要的是一段jQuery,它将仅用{'1}替换<p> </p>
的第一个实例。
所以调用后的结果应该是;
<p>this is the real text</p>
<p> </p>
<p>more</p>
但如果第一行不是<p> </p>
,则调用应该什么都不做。
修改
我已尝试从@Joey C实施解决方案但我无法让它工作。删除只是没有。
var myHtml = "<p>abc</p><p>next para</p>";
var newElement = $(myHtml);
if ($(newElement).first("p").text() == "abc") {
$(newElement).first("p").remove();
}
alert($(myHtml).text());
答案 0 :(得分:8)
以下查找p元素的第一个实例,如果它的html等于您指定的“
”,则将其从DOM中删除。
if ($("p:first").html() == " ")
$("p:first").remove();
如果html作为字符串存储在变量myHTML中,则可以创建DOM元素并执行类似的比较。在测试中,我发现如果使用div包装正在创建的元素,它会更好:
var myHtml = "<p>abc</p><p>next para</p>";
var newElement = $("<div>" + myHtml + "</div>");
if (newElement).find("p:first").text() == "abc") {
newElement.find("p:first").remove();
}
alert(newElement.html());
这实际上不会更新包含原始html代码的字符串,因此如果您仍然需要该变量,则必须重新分配它。
myHTML = newElement.html();
答案 1 :(得分:1)
我喜欢 jQuery(以及一般的函数式编程),但有时候本机JavaScript是要走的路:
function ProcessParagraphs(elem)
{
var children = elem.getElementsByTagName('p');
if(children.length < 1)
return;
var p = children[0];
if($(p).text().replace(/^\s+|\s+$/g,"").length != 0) //remove *all* whitespace and see if anything is left.
return;
else
elem.removeChild(p);
}
如果你有要处理的元素列表,那么我会给他们一个类,比如'foo',并用jQuery处理它们
$('.foo').each(ProcessParagraphs);