在这篇文章中,我们将带领您了解javascript-如何使用wrapInner()将某些内容包装在html标签中?的全貌,包括怎么把js放在html的相关情况。同时,我们还将为您介绍有关HTML.in
在这篇文章中,我们将带领您了解javascript-如何使用wrapInner()将某些内容包装在html标签中?的全貌,包括怎么把js放在html的相关情况。同时,我们还将为您介绍有关HTML.innerHTML vs Jquery.html() – Javascript执行、javascript appendChild,innerHTML,join性能比较代码_javascript技巧、javascript innerHTML使用分析_javascript技巧、javascript innerText和innerHtml应用_javascript技巧的知识,以帮助您更好地理解这个主题。
本文目录一览:- javascript-如何使用wrapInner()将某些内容包装在html标签中?(怎么把js放在html)
- HTML.innerHTML vs Jquery.html() – Javascript执行
- javascript appendChild,innerHTML,join性能比较代码_javascript技巧
- javascript innerHTML使用分析_javascript技巧
- javascript innerText和innerHtml应用_javascript技巧
javascript-如何使用wrapInner()将某些内容包装在html标签中?(怎么把js放在html)
我有这样的@L_301_0@代码:
<ul>
<li>Height: 70cm</li>
<li>Width: 100cm</li>
<li>Depth: 400cm</li>
<li>Color: yellow</li>
</ul>
现在,我希望它看起来像这样(将那些span标签插入其中;请注意,总会有一个字符串“:”):
<ul>
<li><span>Height:</span> <span>70cm</span></li>
<li><span>Width:</span> <span>100cm</span></li>
<li><span>Depth:</span> <span>400cm</span></li>
<li><span>Color:</span> <span>yellow</span></li>
</ul>
我已经尝试过类似的东西:
$('ul.table li').html().replace('<li>', '<li><span class=name>');
$('ul.table li').html().replace(':', ':</span><span class=value>');
$('ul.table li').html().replace('</li>', ':</span></li>');
但这没有用.是否可以使用jQuery(例如,使用wrapInner()或其他类似方法)?
解决方法:
考虑一下:
$( 'li', '.table' ).html( function ( i, html ) {
html = html.split( ' ' );
return '<span>' + html[0] + '</span> <span>' + html[1] + '</span>';
});
现场演示:http://jsfiddle.net/simevidas/gyqCh/
但是,您必须确保每个LI都恰好包含一个空格字符,该空格字符应位于这两个单词之间.
HTML.innerHTML vs Jquery.html() – Javascript执行
参考:html() vs innerHTML jquery/javascript & XSS attacks
从这一点,我可以推断,Jquery提取< script>标签并在DOM中单独执行,它不会出现在DOM中.
请考虑以下HTML代码:
a =< iframe>< iframe //>< script> alert(1)< / script>
b =< iframe>< iframe> //<脚本>警报(1) – ; /脚本>
截至a中的代码,body.innerHTML = a;不执行脚本,但$(“body”).html(a);确实.
为什么? Jquery的.html()在//之后执行内容但是.innerHTML =不执行?
如果是这样,为什么b.内部.innerHTML =或.html()不会被执行?
更新:对于演示,打开控制台,然后执行:
> document.body.innerHTML =“< iframe>< iframe //>< script> alert(1)< / script>”
> $(“body”).html(“< iframe>< iframe //>< script> alert(1)< / script>”);
1将不执行alert(),但2将执行.用b替换HTML值.两者都不会被执行.
更新2:从我可以确定HTML代码将在Jquery的body()中执行但不在.innerHTML =?
解决方法:
如果在jQuery源代码中更深入一点,我们可以找到html
方法.
在这种方法中存在于line
this.empty().append( value );
如果现在转到append
,我们可以找到下一个
append: function() {
return domManip( this, arguments, function( elem ) {
if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
var target = manipulationTarget( this, elem );
target.appendChild( elem );
}
} );
}
所以,现在找到domManip
.这个函数来自html-string构建的fragmen,如果片段有脚本标签执行next code
DOMEval( node.textContent.replace( rcleanScript, "" ), doc );
在哪里DOMEval
function DOMEval( code, doc ) {
doc = doc || document;
var script = doc.createElement( "script" );
script.text = code;
doc.head.appendChild( script ).parentNode.removeChild( script );
}
所以,至少,我们找到执行脚本的地方.
那么,为什么在某些情况下html运行脚本,否则不行?
这取决于输入字符串和返回buildFragment
function.
在buildFragment中我们可以找到next line
tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
其中elem是输入字符串,jQuery.htmlPrefilter
是下一个函数
htmlPrefilter: function( html ) {
return html.replace( rxhtmlTag, "<$1></$2>" );
}
所以,输入字符串刚刚替换为某些regular exporession rxhtmlTag
.
rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|Meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
所以,试试这个来检查字符串:
console.log(jQuery.htmlPrefilter("<iframe><iframe //><script>alert(1)</" + "script>"));
console.log(jQuery.htmlPrefilter("<iframe><iframe> // <script>alert(1)</" + "script>"));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.1/jquery.min.js"></script>
因此,在第一种情况下,结果是
<iframe><iframe /></iframe><script>alert(1)</script>
在tmp div中将其作为innerHTML插入后,div内部创建了两个元素:iframe和script.所以在此脚本可用于查找和执行之后
在第二种情况:
<iframe><iframe> // <script>alert(1)</script>
字符串未更改,并且在tmp div中将其作为innerHTML插入后,div内部只创建一个带编码内容的iframe元素.这就是为什么在这种情况下脚本不能执行.
javascript appendChild,innerHTML,join性能比较代码_javascript技巧
javascript innerHTML使用分析_javascript技巧
空格处理
当在DIV中输入"a[任意个空格]a" HTML呈现在Chrome和IE下是一样的:只显示一个空格。
innerHTML属性
- IE还是两个a加一个空格,
- Chrome则是原始输入的样子。
回车
当在DIV中输入"a[回车][任意个空格]a"时,HTML呈现Chrome和IE是一样的。
innerHTML属性
- IE是3个字符,在两个a中间加了个空格。
- Chrome则是原始输入的样子,将回车解析为\n。
HTML标记
当在DIV中输入"a
a" HTML呈现在Chrome和IE下是一样的。
innerHTML属性
- IE中是a
a,将HTML标记大写了! - Chrome是a
a,将HTML标记小写
TEXTAREA中回车
在textarea多行输入框中输入a[回车]b,HTML呈现Chrome和IE是一样的。
value属性
- IE是4个字符,内容为:a\r\nb
- Chrome是3个字符,内容为:a\nb
javascript innerText和innerHtml应用_javascript技巧
看看代码
document.getElementById("adiv").innerHTML=txt.join(" ");
使用innerHtml会转义成HTML。加粗显示出来
使用innerText不会转译,标签全出来了
js中的 ok这个函数,就想c#里的StringBuilder,
js中用数组这种写法,可以提高字符串的性能!!!!
关于javascript-如何使用wrapInner()将某些内容包装在html标签中?和怎么把js放在html的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于HTML.innerHTML vs Jquery.html() – Javascript执行、javascript appendChild,innerHTML,join性能比较代码_javascript技巧、javascript innerHTML使用分析_javascript技巧、javascript innerText和innerHtml应用_javascript技巧的相关信息,请在本站寻找。
本文标签: