如何使用jQuery/plainoldJavaScript更改元素(例如h1->h2)?
当然,与文档有效性相关的可能错误有很多,但是当将段落p更改为address元素时,我会遇到直接的障碍。我目前的方法大致如下:如何使用jQuery/plainoldJavaScript更改元素(例如h1->h2)?,javascript,jquery,Javascript,Jquery,当然,与文档有效性相关的可能错误有很多,但是当将段落p更改为address元素时,我会遇到直接的障碍。我目前的方法大致如下: var p = $('p#test'); p.replaceWith('<address>' + p.html() + '</address>'); 但对于这个具体案例来说,这是失败的;它适用于p->blockquote或h2->h3。Firebug表示出于某种原因,文档中添加了一个自动关闭元素 有人能发现错误或建议其他方法吗?您可以在标题周围使
var p = $('p#test');
p.replaceWith('<address>' + p.html() + '</address>');
但对于这个具体案例来说,这是失败的;它适用于p->blockquote或h2->h3。Firebug表示出于某种原因,文档中添加了一个自动关闭元素
有人能发现错误或建议其他方法吗?您可以在标题周围使用占位符: <span id="demo"><h1>Title</h1></span> 然后使用JavaScript DOM为innerHTML属性创建新值 <script type="javascript"> setTitle = function(id, tag, title) { var container = document.getElementById(id); container.innerHTML = '<' + tag + '>' + title + '</' + tag + '>'; } setTitle('demo', 'h1', 'My Title'); </script>
您可以在标题周围使用占位符: <span id="demo"><h1>Title</h1></span> 然后使用JavaScript DOM为innerHTML属性创建新值 <script type="javascript"> setTitle = function(id, tag, title) { var container = document.getElementById(id); container.innerHTML = '<' + tag + '>' + title + '</' + tag + '>'; } setTitle('demo', 'h1', 'My Title'); </script> 您的解决方案会遇到各种可怕的HTML转义问题,可能还会受到注入攻击
您的解决方案可能会遇到各种可怕的HTML转义问题和可能的注入攻击。这对我来说很好,只需一个最小的页面。你的页面验证了吗?它在加载时验证,是的。就我正确阅读HTML规范而言,它也会在更改后进行验证,即在任何上下文中,地址都可以替换p。以防万一,您可能想知道是什么问题:p.HTML获取第一个匹配元素的HTML内容。你必须使用这种方法使用p.each。。。;这对我来说很好,只需一页。你的页面验证了吗?它在加载时验证,是的。就我正确阅读HTML规范而言,它也会在更改后进行验证,即在任何上下文中,地址都可以替换p。以防万一,您可能想知道是什么问题:p.HTML获取第一个匹配元素的HTML内容。你必须使用这种方法使用p.each。。。;Daniel,谢谢你的回答,但是这不是假设address元素已经存在吗?假设body只包含stuff,我希望它是stuffNo,语法$创建了一个新的address元素,然后可以用来替换p。但是请注意,我刚刚对我原来的帖子做了一个更正。哇,这对我来说是一个新的jQuery:谢谢,Daniel,工作起来像做梦一样。Daniel,谢谢你的回答,但这不是假设address元素已经存在吗?假设body只包含stuff,我希望它是stuffNo,语法$创建了一个新的address元素,然后可以用来替换p。但是请注意,我刚刚对我原来的帖子做了一个更正。哇,这对我来说是一个新的jQuery:谢谢,丹尼尔-工作起来像个梦。为什么这个被否决了?在没有解释为什么的情况下对这样的内容进行否决是没有帮助的…它是完整地写入还是简单地用新字符串覆盖目标?它被否决是因为:1它没有回答问题。问题是如何用另一个标记替换现有标记,但保留原始标记的内容。此代码将替换标记及其内容。2无正当理由,它需要额外的占位符标记。3它不会转义标记或标题,因此这些变量可能包含HTML标记,这些标记将被解析并注入页面。这可能是注入攻击的载体。基本上,这个答案是一个不好的分形。为什么这被否决了?在没有解释为什么的情况下对这样的内容进行否决是没有帮助的…它是完整地写入还是简单地用新字符串覆盖目标?它被否决是因为:1它没有回答问题。问题是如何用另一个标记替换现有标记,但保留原始标记的内容。此代码将替换标记及其内容。2无正当理由,它需要额外的占位符标记。3它不会转义标记或标题,因此这些变量可能包含HTML标记,这些标记将被解析并注入页面。这可能是注入攻击的载体。基本上,这个答案是坏的分形。