Bra*_*dev 6 javascript jquery this
我正在使用jQuery重新格式化一些非常糟糕的HTML.我需要将兄弟<font>元素拼接在一起.我试过这段代码:
$('font+font').each(function() {
this.html().appendTo( this.prev() );
this.remove();
});
Run Code Online (Sandbox Code Playgroud)
但它给了我这个错误:TypeError:'undefined'不是一个函数(评估'this.html()')
这是HTML的示例:
<font>This fragment </font><font>is actually one element.</font>
更新
我更新了我的代码$(this),但它仍然无法正常工作.当我运行此代码时
$('font+font').each(function() {
$(this).html().appendTo( $(this).prev() );
$(this).remove();
});
Run Code Online (Sandbox Code Playgroud)
我收到此错误:TypeError:'undefined'不是函数(评估'$(this).html().appendTo($(this).prev())')
Rob*_*b W 16
this 必须先包装在jQuery对象中,然后才能使用jQuery方法..html()返回一个字符串.你不能在没有包装的情况下对字符串使用jQuery方法.请$this.prev().append( $this.html() )改用.$(this)不止一次使用时,最好存储$(this)在临时变量中.使用美元符号为jQuery对象添加前缀是惯例.码:
$('font+font').each(function() {
var $this = $(this);
$this.prev().append( $this.html() );
$this.remove();
});
Run Code Online (Sandbox Code Playgroud)
当您使用每个语句时,它将返回thisDOM元素,而不是jQuery对象..html()必须在jQuery对象上调用.因此,修复的第一部分是this使用$符号转换为jQuery元素.
$(this).html(); //don't use this.html();
Run Code Online (Sandbox Code Playgroud)
第二个问题是html()返回一个字符串.你不能调用AppendTo()字符串,只能调用jQuery对象.由于您正在使用.html()我将假设您想要字符串内容而不是完整内容.如果是这样的话,Rob的回答更合适.
this.textContent = $(this).prev().html() + this.textContent; // prepend siblings content
Run Code Online (Sandbox Code Playgroud)
最终代码最终看起来像这样:
$('font+font').each(function() {
this.textContent = $(this).prev().html() + this.textContent;
$(this).prev().remove();
});
Run Code Online (Sandbox Code Playgroud)
http://jsfiddle.net/b6vLL37k/1
| 归档时间: |
|
| 查看次数: |
27854 次 |
| 最近记录: |