好吧,之前我曾涉猎过JavaScript,但我写的最有用的东西是CSS样式切换器。所以我对此有些新意。假设我有这样的HTML代码:
<div id="foo">
<div class="bar">
Hello world!
</div>
</div>
我如何更改“Hello world!”到“再见世界!” ?我知道document.getElementByClass和document.getElementById如何工作,但我想更具体。对不起,如果之前有人询问过。
答案 0 :(得分:180)
首先,您需要选择具有getElementById
。
var targetDiv = document.getElementById("foo").getElementsByClassName("bar")[0];
getElementById
仅返回一个节点,但getElementsByClassName
返回节点列表。由于只有一个具有该类名称的元素(据我所知),您可以获得第一个元素([0]
对于它来说就是这样 - 它就像一个数组)。
然后,您可以使用.textContent
更改html。
targetDiv.textContent = "Goodbye world!";
var targetDiv = document.getElementById("foo").getElementsByClassName("bar")[0];
targetDiv.textContent = "Goodbye world!";
&#13;
<div id="foo">
<div class="bar">
Hello world!
</div>
</div>
&#13;
答案 1 :(得分:13)
你可以这样做:
var list = document.getElementById("foo").getElementsByClassName("bar");
if (list && list.length > 0) {
list[0].innerHTML = "Goodbye world!";
}
或者,如果你想用更少的错误检查和更简洁的方式来做,它可以在一行中完成,如下所示:
document.getElementById("foo").getElementsByClassName("bar")[0].innerHTML = "Goodbye world!";
解释:
id="foo"
。class="bar"
。innerHTML
以更改其内容。警告:一些较旧的浏览器不支持getElementsByClassName
(例如旧版本的IE)。如果失踪,该功能可以填充到位。
我建议使用内置CSS3选择器支持的库,而不是担心自己的浏览器兼容性(让其他人完成所有工作)。如果你只想要一个图书馆来做那个,那么Sizzle会很棒。在Sizzle,这将是这样做的:
Sizzle("#foo .bar")[0].innerHTML = "Goodbye world!";
jQuery内置了Sizzle库,在jQuery中,这将是:
$("#foo .bar").html("Goodbye world!");
答案 2 :(得分:4)
如果这需要在IE 7或更低版本中运行,则需要记住所有浏览器中都不存在getElementsByClassName。因此,您可以创建自己的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!";
}
}
答案 3 :(得分:3)
递归函数:
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);
}
}
}
答案 4 :(得分:3)
最简单的方法是:
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}]`);
}
答案 5 :(得分:-2)
您不应该使用 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
如果你想要任何删除编辑任何操作,那么只需添加&#34;。&#34;落后并进行操作