jQuery this.html()返回undefined

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

  1. this 必须先包装在jQuery对象中,然后才能使用jQuery方法.
  2. .html()返回一个字符串.你不能在没有包装的情况下对字符串使用jQuery方法.请$this.prev().append( $this.html() )改用.
  3. $(this)不止一次使用时,最好存储$(this)在临时变量中.使用美元符号为jQuery对象添加前缀是惯例.

码:

$('font+font').each(function() {
    var $this = $(this);
    $this.prev().append( $this.html() );
    $this.remove();
});
Run Code Online (Sandbox Code Playgroud)


mrt*_*man 8

当您使用每个语句时,它将返回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