从.html()获取文本框的值

时间:2018-08-06 15:08:47

标签: jquery html

我正在使用.html()函数创建文本框,但无法获取其值。

var inner_html_content = '<body><p><br>some_text</p> <input type="text" name="rtn_resn" id="retn_rsn" style="width: 80%;""></body>';

$('<div/>').html(inner_html_content);

var value = $(this).find("#retn_rsn").val();

但是它总是返回undefined。如何从文本框中获取值?

1 个答案:

答案 0 :(得分:0)

读取输入字段值

您可以使用.val()而不是.html()从输入字段中获取值-尽管由于要使用空值创建该字段,所以将得到空结果:

$('#container').html('<input id="retn_rsn">')
console.log($("#retn_rsn").val()) // empty string
// Now replace it with one that has a value:
$('#container').html('<input id="retn_rsn" value="test">')
console.log($("#retn_rsn").val()) // not empty string
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container"></div>

因此,这就是上述操作步骤的完整答案。以下是您获得结果的原因的详细信息:

$('<div>')$('div')

不同

您得到undefined而不是空字符串的原因是这一行:

$('<div/>').html(inner_html_content);

这不会将HTML插入现有文档中;它会创建一个新的单独的文档片段,并将HTML插入其中。稍后,当您尝试查询主文档时,您将找不到匹配项,因为这不是您添加输入的地方:

var foo = $('<div/>').html("TEST"); // capturing the newly created fragment in `foo`
console.log($('#container').html()) // no change in main document
console.log(foo.html()) // but the separate document fragment exists
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container"></div>

您可能打算使用的是:

$('div').html(inner_html_content);

...尽管请注意,这会将html插入页面的每个 div中,这几乎肯定不是您想要的;您应该为插入点使用更具体的选择器。

this的内容取决于其上下文

另一个问题是您在此处使用this时,它与您的想法无关:

var value = $(this).find("#retn_rsn").val();

在您的问题所示的上下文中,this引用了window对象而不是文档正文,因此其上的find()将不返回任何内容:

console.log(this === window) // true
console.log($(window).find('#container').length) // 0 
console.log($(document).find('#container').length) // 1 (the document contains the html, not the window)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container"></div>

在其他情况下,this可以引用其他对象-但与其说出比我在此答案中所涉及的内容还要详尽得多的细节,不如解释它,我只是指出您已经完全不需要使用this!您要查找的元素具有特定的ID,因此只需使用$('#retn_rsn')而不是$(this).find('#retn_rsn')

您没有问过的奖励问题:嵌套的<body>标签

在现有文档的正文中插入<body>标签会导致无效的HTML。幸运的是,jQuery似乎通过悄悄地删除了无效的嵌套<body>标签来为您解决了此问题:

$('#container').html('<body>...</body>')

console.log($('#container').html()) // `body` tag removed
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container"></div>

...但是最好不要一开始就包含它。