在div标签中通过id获取元素的简单方法?
如果我重复这个问题,请原谅我。
我有 HTML,div 标签内的所有元素都有不同的 id,假设我已经获得了对 div 的引用,是否有任何简单的方法可以通过其 id 获取元素,而无需迭代该 div 的所有元素?
这是我的示例 html:
<div id="div1" >
<input type="text" id="edit1" />
<input type="text" id="edit2" />
</div>
<div id="div2" >
<input type="text" id="edit1" />
<input type="text" id="edit2" />
</div>
Please forgive me if I repeat the question.
I have HTML that all elements inside a div tag has different id, suppose I have already get the reference to the div, is there any simple way to get the element by its id without iterate all elements with that div?
here is my sample html:
<div id="div1" >
<input type="text" id="edit1" />
<input type="text" id="edit2" />
</div>
<div id="div2" >
<input type="text" id="edit1" />
<input type="text" id="edit2" />
</div>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
你可以尝试这样的事情。
示例标记。
JavaScript
演示: http://jsfiddle.net/naveen/H8j2A/
nnnnnn 建议的更好方法
演示:http://jsfiddle.net/naveen/4JMgF/
称呼它为
You may try something like this.
Sample Markup.
JavaScript
Demo: http://jsfiddle.net/naveen/H8j2A/
A better method as suggested by nnnnnn
Demo: http://jsfiddle.net/naveen/4JMgF/
Call it like
或
或
或
例如。
or
or
or
eg.
你不想这样做。多个具有相同
id
的元素是无效的 HTML。浏览器不会那么好地对待,并且您将有未定义的行为,这意味着您不知道当您通过该 id 选择元素时浏览器会给您什么,它可能是不可预测的。您应该使用一个类,或者只是迭代输入并跟踪索引。
尝试这样的事情:
JSFiddle
You don't want to do this. It is invalid HTML to have more than one element with the same
id
. Browsers won't treat that well, and you will have undefined behavior, meaning you have no idea what the browser will give you when you select an element by that id, it could be unpredictable.You should be using a class, or just iterating through the inputs and keeping track of an index.
Try something like this:
JSFiddle
一种在核心 JS 中实现 OP 期望的简单方法。
A simple way to do what OP desires in core JS.
给定的 ID 在一个页面中只能使用一次。多个对象具有相同的 ID 是无效的 HTML,即使它们位于页面的不同部分。
您可以将 HTML 更改为:
然后,您可以使用 CSS 选择器获取 div1 中的第一项,如下所示:
On in jQuery:
或者,如果您想迭代其中一个 div 中的项目,您可以这样做:
如果我不能使用像 jQuery 或 YUI 这样的框架,我会去 Sizzle 并包含它的选择器逻辑(它与 jQuery 内部的选择器引擎相同),因为有了好的选择器库,DOM 操作会变得更加容易。
如果我什至无法使用 Sizzle(这将大大降低开发人员的工作效率),您可以使用普通 DOM 函数来遍历给定元素的子元素。
您将使用诸如 childNodes 或firstChild 和nextSibling 之类的DOM 函数,并且必须检查nodeType 以确保您只获得所需的元素类型。我从不以这种方式编写代码,因为它比使用选择器库的效率低得多。
A given ID can be only used once in a page. It's invalid HTML to have multiple objects with the same ID, even if they are in different parts of the page.
You could change your HTML to this:
Then, you could get the first item in div1 with a CSS selector like this:
On in jQuery:
Or, if you want to iterate the items in one of your divs, you can do it like this:
If I couldn't use a framework like jQuery or YUI, I'd go get Sizzle and include that for it's selector logic (it's the same selector engine as is inside of jQuery) because DOM manipulation is massively easier with a good selector library.
If I couldn't use even Sizzle (which would be a massive drop in developer productivity), you could use plain DOM functions to traverse the children of a given element.
You would use DOM functions like childNodes or firstChild and nextSibling and you'd have to check the nodeType to make sure you only got the kind of elements you wanted. I never write code that way because it's so much less productive than using a selector library.
在 HTML 中,id 应该是唯一的。我建议你将代码更改为如下所示:
In HTML ids should be unique. I suggest you change your code to something like this:
不幸的是,这是无效的 HTML。 ID 在整个 HTML 文件中必须是唯一的。
当您使用 Javascript 的
document.getElementById()
时,它将返回哪个元素取决于浏览器,大多数情况下它是具有给定 ID 的第一个元素。您将没有其他机会重新分配您的 ID,或者使用
class
属性。Unfortunately this is invalid HTML. An ID has to be unique in the whole HTML file.
When you use Javascript's
document.getElementById()
it depends on the browser, which element it will return, mostly it's the first with a given ID.You will have no other chance as to re-assign your IDs, or alternatively using the
class
attribute.