通过类和ID获取元素里面的元素 – JavaScript
好吧,之前我已经涉足JavaScript,但是我写的最有用的东西是CSS样式切换器。 所以我对这个有点新鲜 比方说,我有这样的HTML代码:
<div id="foo"> <div class="bar"> Hello world! </div> </div>
我将如何改变“Hello world!” 到“再见的世界!” ? 我知道如何document.getElementByClass和document.getElementById工作,但我想得到更具体的。 对不起,如果这之前已经问过。
那么,首先你需要用像getElementById
这样的函数来select元素。
var targetDiv = document.getElementById("foo").getElementsByClassName("bar")[0];
getElementById
只返回一个节点,但getElementsByClassName
返回一个节点列表。 由于只有一个具有该类名称的元素(据我所知),你可以得到第一个元素(这就是[0]
所用的元素 – 就像一个数组)。
然后,你可以用.innerHTML
改变html。
targetDiv.innerHTML = "Goodbye world!";
var targetDiv = document.getElementById("foo").getElementsByClassName("bar")[0]; targetDiv.innerHTML = "Goodbye world!";
<div id="foo"> <div class="bar"> Hello world! </div> </div>
你可以这样做:
var list = document.getElementById("foo").getElementsByClassName("bar"); if (list && list.length > 0) { list[0].innerHTML = "Goodbye world!"; }
或者,如果你想用更less的错误检查和更简洁的方法来做到这一点,可以这样做:
document.getElementById("foo").getElementsByClassName("bar")[0].innerHTML = "Goodbye world!";
解释:
- 你得到
id="foo"
的元素。 - 然后,您可以find该对象中包含
class="bar"
。 - 这返回一个类似数组的nodeList,所以你引用该节点列表中的第一个项目
- 然后,您可以设置该项目的
innerHTML
来更改其内容。
注意事项:一些旧的浏览器不支持getElementsByClassName
(例如旧版本的IE)。 如果失踪,该function可以被删除。
这是我build议使用内置CSS3select器支持的库,而不是自己担心浏览器兼容性(让其他人完成所有工作)。 如果你只想要一个图书馆来做到这一点,那么Sizzle将会很好地工作。 在嘶嘶声,这将是这样做的:
Sizzle("#foo .bar")[0].innerHTML = "Goodbye world!";
jQuery的内置和jQuery的Sizzle库,这将是:
$("#foo .bar").html("Goodbye world!");
如果这需要在IE 7或更低版本中工作,则需要记住getElementsByClassName在所有浏览器中都不存在。 正因为如此,你可以创build你自己的getElementsByClassName,或者你可以试试这个。
var fooDiv = document.getElementById("foo"); for (var i = 0, childNode; i <= fooDiv.childNodes.length; i ++) { childNode = fooDiv.childNodes[i]; if (/bar/.test(childNode.className)) { childNode.innerHTML = "Goodbye world!"; } }
recursion函数:
function getElementInsideElement(baseElement, wantedElementID) { var elementToReturn; for (var i = 0; i < baseElement.childNodes.length; i++) { elementToReturn = baseElement.childNodes[i]; if (elementToReturn.id == wantedElementID) { return elementToReturn; } else { return getElementInsideElement(elementToReturn, wantedElementID); } } }
最简单的方法是:
function findChild(idOfElement, idOfChild){ let element = document.getElementById(idOfElement); return element.querySelector('[id=' + idOfChild + ']'); }
或更好的可读性:
findChild = (idOfElement, idOfChild) => { let element = document.getElementById(idOfElement); return element.querySelector(`[id=${idOfChild}]`); }
你不应该使用document.getElementByID,因为它的工作只适用于id固定的客户端控件。 你应该像下面的例子一样使用jQuery。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <div id="foo"> <div class="bar"> Hello world! </div> </div>
用这个 :
$("[id^='foo']").find("[class^='bar']") // do not forget to add script tags as above
如果你想删除编辑任何操作,只需添加“。” 背后,做这个行动