13

我有以下html:

<div class="copy_me_text">
    <div>
        <input type="text" name="name" />
        <input type="hidden" name="id" />
    </div>
</div>

<div class="copy_me_hidden">
    <div>
        <input type="hidden" name="name" />
        <input type="hidden" name="id" />
    </div>
</div>

并遵循js代码:

var $cloned_text = $('.copy_me_text').clone();
$cloned_text.find('input[name="name"]').val("SOMETHING");
$cloned_text.find('input[name="id"]').val("SOMETHING");
console.log($cloned_text.html());

var $cloned_hidden = $('.copy_me_hidden').clone();
$cloned_hidden.find('input[name="name"]').val("SOMETHING");
$cloned_hidden.find('input[name="id"]').val("SOMETHING");
console.log($cloned_hidden.html());

输出对我来说很奇怪:

<div>
    <input name="name" type="text">
    <input value="SOMETHING" name="id" type="hidden">
</div>
<div>
    <input value="SOMETHING" name="name" type="hidden">
    <input value="SOMETHING" name="id" type="hidden">
</div>

我还创建了 jsFiddle示例。这是正确的行为吗?我不明白,为什么在.html()函数中,input type="text"没有返回值。

4

5 回答 5

8
于 2013-01-21T15:02:24.720 回答
6

这肯定看起来像 jQuery 中的一个错误。attr()您可以使用以下函数强制它返回:

$cloned_text.find('input[name="name"]').attr('value', "SOMETHING");

查看更新的小提琴

于 2013-01-21T14:01:55.633 回答
3

html()函数将返回分配给元素的 html。在您的情况下,您正在为输入文本字段分配值。

试试这个

$cloned_text.find('input[name="name"]').attr('value', "SOMETHING");
于 2013-01-21T14:02:37.967 回答
2

这不是一个 jQuery 错误。

正如您在method的jQuery 源代码中val看到的那样,它们只是设置元素value的 ,这与向input元素添加新属性(最终导致value属性更改)不同。

jQuery 源(hooks在此上下文中为 null):

if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
    this.value = val;
}

所以,要得到你想要的,你必须向val元素添加一个新属性,使用

.attr('value', "SOMETHING");

正如其他人提到的。

通过使用.attr新属性将被添加到元素中,并将.html其作为字符串返回。

于 2013-01-21T14:19:15.617 回答
1

解决此问题的一个好方法是使用该attr()函数而不是val().

所以,而不是

$cloned_text.find('input[name="name"]').val("SOMETHING");

$cloned_text.find('input[name="name"]').attr("value", "SOMETHING");
于 2013-01-21T14:07:00.203 回答