jQuery html方法中的怪异行为

时间:2008-11-22 05:20:45

标签: javascript jquery

为什么$(“p”)。html(0)使所有段落为空而不是包含字符'0'的任何理由?

而不是假设我在jQuery中发现了一个错误,这可能是我的一个误解。

5 个答案:

答案 0 :(得分:5)

jQuery只接受一个字符串作为val方法的html()参数的参数。如果你传递一个像你一样的数字,它将调用html()方法覆盖设置元素的内容,但参数的值最终将为null或空字符串。

试试这个:

$("p").html((0).toString())

Relevant documentation

答案 1 :(得分:0)

我想在某些时候,它会检查if (newContent == false),并且不会继续添加任何内容?我试着查看源代码,但有点迷失......

我还猜测这不会被视为错误,因为函数会调用字符串,如果传递“0”(作为字符串),它会按预期工作。

解决方法是:

var myNum = 0;
$('p').html('' + myNum);

答案 2 :(得分:0)

尝试使用text()代替html()

答案 3 :(得分:0)

执行html调用的代码在别人的插件中,而不是修改它,使升级变得乏味,我只是编写了下面的小插件,修改了html方法,以推荐使用spoon16。

(function($) {
  var oldHtml = $.fn.html;
  $.fn.html = function (content) {
    oldHtml.apply(this, [content.toString()]);
  }
})(jQuery);

这有点像黑客,但它对我有用,并不要求我修改我正在使用的插件。

我只是觉得别人可能会想看到这个。

答案 4 :(得分:-1)

我猜你错过了jQuery的工作方式,

$('p')

返回所有段落和html(val)函数:

Set the html contents of every matched element. This property is not available on XML documents (although it will work for XHTML documents).

http://docs.jquery.com/Attributes/html#val
因此,如果您只想设置第一次使用的内容

$("P").eq(0).html( 'something' );

或获取html:

$("P").eq(0).html();

http://docs.jquery.com/Core/eq#position
更多关于jQuery选择器的信息:
http://docs.jquery.com/Selectors