closuresHTMLinput标签问题

我想知道为什么HTML <input>标签不会像其他HTML标签那样得到一个结束标签,如果我们closures了input标签会出现什么问题呢?

我试图Google,我发现标准写入这样的input标签<input type="text" name="name">不能用</input>closures它。

当我使用Radiobutton创buildinput标签时,我个人感觉到了这个问题

 var DOM_tag = document.createElement("input"); 

这虽然创build单选button,但TextNode我附加到单选button

 document.createTextNode("Radio Label"); 

不起作用。 它只是显示没有Radio Label的单选button,在这种情况下。 虽然我可以看到完整的代码

 <input id="my_id" type="radio" name="radio_name">Radio Label</input> 

任何人都可以解释吗?

PS:发生在我身上的主要问题是自动closuresinput标签,因为我在使用var DOM_tag = document.createElement("input"); 这会自动创build一个结束标记。 我该怎么办?

这些是无效的元素。 这意味着它们不能包含文本或其他元素,因此不需要结束标记。

但是,他们可以有一个<label>与他们关联:

 <input id="my_id" type="radio" name="radio_name"> <label for="my_id">Radio Label</label> 

大自然的单选button无论如何都不能包含文本,所以他们接受文本或其他元素作为内容是没有意义的。 接受文本input的控件的另一个问题是:其文本内容应该作为它的值还是其标签? 为了避免歧义,我们有一个<label>元素,它完全符合它所说的,我们有一个value属性来表示input控件的值。

请注意,HTML不要求你明确地closures一个void元素标签。 事实上,像</input>这样的结束标签在HTML中是明文禁止的。 XHTML是不同的; 通过XML规则,每个标签必须打开和closures; 这是使用快捷键语法而不是</input>标记完成的:

 <input id="my_id" type="radio" name="radio_name" /> <label for="my_id">Radio Label</label> 

起源是SGML中的空元素概念,其思想是某些元素充当将从外部源或环境插入的内容的占位符。 这就是为什么imginput在HTML中被声明为空的原因,或者更确切地说,是由于EMPTY声明了内容(也就是说,没有内容可能与只是偶尔具有空的内容的元素相反)。 有关更长的解释,请参阅我的页面SGML,HTML,XML和XHTML中的空元素 。

这意味着这样一个元素的开始标签也起到了结束标签的作用。 处理SGML或HMTL文档的软件应该从文档types定义(DTD)知道哪些标签具有该属性。 实际上,这些信息是内置在网页浏览器中的。 使用像</input>这样的结束标记是无效的,但是浏览器只是跳过无法识别或伪造的结束标记。

在XML中,因此在XHTML中,事情是不同的,因为XML是SGML的一个强烈简化的变体,打算简单处理。 处理XML的软件必须能够在没有任何DTD的情况下进行所有的分析,所以XML需要所有元素的结束标记,尽pipe你可以(为了兼容,主要应该 )使用特殊的语法,如<input /> <input></input> 。 但XHTML仍然不允许标签之间的内容。

所以你不能在元素内部为input元素指定标签,因为它不能有任何内容。 您可以使用titlevalue或(在HTML5中) placeholder属性以不同的含义将文本与它关联起来,但要将普通的可见内容作为标签使用,则需要将它们放在不同的元素中。 正如其他答案中所述,build议将其放在label元素中,并定义与id和属性的关联。

<input>是一个空标签,因为它没有被devise成具有任何内容或结束标签。 为了符合规定,您可以像这样使用它来表示标签的结尾:

 <input type="text" value="blah" /> 

这是符合XHTML标准的方式来closures没有内容的标签。 <img>标签也是一样。

要标记一个单选button,您可能最好使用<label>标签,就像BoltClock的答案所描述的那样。

您可以使用

 var label = document.createTextNode("Radio Label"); DOM_tag.parentElement.insertBefore(label,DOM_tag); 

将标签放在单选button旁边。

使用createElement / createTextNode组合效果最好。

 $('#list-consultant').append( $(document.createElement('div')).addClass('checkbox').append( $(document.createElement('label')).append( $(document.createElement('input')).prop({ type: 'checkbox', checked: 'checked' }), $(document.createTextNode('Ron Jeremy')) ) ) ); 

以上片段将产生:

 <div id='list-consultant'> <div class='checkbox'> <label><input type='checkbox' checked='checked'/>Ron Jeremy</label> </div> </div> 

你可以试试:

 var label = document.createTextNode("Radio Label"); document.createElement("input").prop({type="text"}); document.write(input.append(label)); 

可能工作,可能不会。 (这不适合我,但我不明白为什么不..我认为会的。)如果有帮助,很好。 (我还在学习Javascript。)

否则坚持使用的标准答案:

 <input id="my_id" type="radio" name="radio_name" /> <label for="my_id">Radio Label</label> 

这是我通常会做的。 干杯!