我想替换html元素中的内容,所以我正在使用以下函数:
function ReplaceContentInContainer(id,content) {
var container = document.getElementById(id);
container.innerHTML = content;
}
ReplaceContentInContainer('box','This is the replacement text');
<div id='box'></div>
以上工作很好,但问题是我在页面上有多个html元素,我想替换它的内容。所以我不能使用id而是使用类。我被告知javascript不支持任何类型的内置get元素的类函数。那么如何修改上面的代码以使其适用于类而不是ID?
P.S。我不想为此使用jQuery。
答案 0 :(得分:196)
此代码应适用于所有浏览器。
function replaceContentInContainer(matchClass, content) {
var elems = document.getElementsByTagName('*'), i;
for (i in elems) {
if((' ' + elems[i].className + ' ').indexOf(' ' + matchClass + ' ')
> -1) {
elems[i].innerHTML = content;
}
}
}
它的工作方式是循环遍历文档中的所有元素,并在类列表中搜索matchClass
。如果找到匹配项,则替换内容。
答案 1 :(得分:170)
当然,现在所有现代浏览器都支持以下更简单的方法:
var elements = document.getElementsByClassName('someClass');
但要注意它不适用于IE8或之前。见http://caniuse.com/getelementsbyclassname
此外,并非所有浏览器都会返回纯粹的NodeList
,就像他们应该的那样。
您最好还是使用自己喜欢的跨浏览器库。
答案 2 :(得分:109)
document.querySelectorAll(".your_class_name_here");
这将适用于实现该方法的“现代”浏览器(IE8 +)。
function ReplaceContentInContainer(selector, content) {
var nodeList = document.querySelectorAll(selector);
for (var i = 0, length = nodeList.length; i < length; i++) {
nodeList[i].innerHTML = content;
}
}
ReplaceContentInContainer(".theclass", "HELLO WORLD");
如果您想为旧版浏览器提供支持,您可以加载一个独立的选择器引擎,如Sizzle(4KB mini + gzip)或Peppy(10K mini),如果要加载它找不到本机querySelector方法。
加载选择器引擎是否过度杀戮才能获得具有某个类的元素?大概。但是,脚本并不是那么大,您可能会发现选择器引擎在脚本中的许多其他位置都很有用。
答案 3 :(得分:26)
一种简单易行的方法
var cusid_ele = document.getElementsByClassName('custid');
for (var i = 0; i < cusid_ele.length; ++i) {
var item = cusid_ele[i];
item.innerHTML = 'this is value';
}
答案 4 :(得分:6)
我很惊讶使用正则表达式没有答案。根据{{3}},使用RegExp.test
代替String.indexOf
,这几乎是Andrew's answer,因为它似乎在多个操作中表现更好。
它还jsPerf tests。
function replaceContentInContainer(matchClass, content) {
var re = new RegExp("(?:^|\\s)" + matchClass + "(?!\\S)"),
elems = document.getElementsByTagName('*'), i;
for (i in elems) {
if (re.test(elems[i].className)) {
elems[i].innerHTML = content;
}
}
}
replaceContentInContainer("box", "This is the replacement text.");
如果经常查找相同的类,可以通过将(预编译的)正则表达式存储在别处并将它们直接传递给函数而不是字符串来进一步改进它。
function replaceContentInContainer(reClass, content) {
var elems = document.getElementsByTagName('*'), i;
for (i in elems) {
if (reClass.test(elems[i].className)) {
elems[i].innerHTML = content;
}
}
}
var reBox = /(?:^|\s)box(?!\S)/;
replaceContentInContainer(reBox, "This is the replacement text.");
答案 5 :(得分:4)
这应该可以在任何浏览器中使用......
function getByClass (className, parent) {
parent || (parent=document);
var descendants=parent.getElementsByTagName('*'), i=-1, e, result=[];
while (e=descendants[++i]) {
((' '+(e['class']||e.className)+' ').indexOf(' '+className+' ') > -1) && result.push(e);
}
return result;
}
您应该能够像这样使用它:
function replaceInClass (className, content) {
var nodes = getByClass(className), i=-1, node;
while (node=nodes[++i]) node.innerHTML = content;
}
答案 6 :(得分:3)
var elems = document.querySelectorAll('.one');
for (var i = 0; i < elems.length; i++) {
elems[i].innerHTML = 'content';
};
答案 7 :(得分:2)
我认为在最初询问时这不是有效选项,但您现在可以使用document.getElementsByClassName('');
。例如:
var elements = document.getElementsByClassName(names); // or:
var elements = rootElement.getElementsByClassName(names);
有关详情,请参阅MDN documentation。
答案 8 :(得分:0)
我认为:
function ReplaceContentInContainer(klass,content) {
var elems = document.getElementsByTagName('*');
for (i in elems){
if(elems[i].getAttribute('class') == klass || elems[i].getAttribute('className') == klass){
elems[i].innerHTML = content;
}
}
}
会起作用
答案 9 :(得分:0)
get elements by class in javascript 有 3 种不同的方法。但是这里对于您的查询,因为您有多个具有相同类名的元素,您可以使用 2 种方法:
getElementsByClassName 方法 - 它返回文档中或调用它的父元素中存在的具有指定类的所有元素。
function ReplaceContentInContainer(className, content) {
var containers = document.getElementsByClassName(className);
for (let i = 0; i < containers.length; i++) {
containers[i].innerHTML = content;
}
}
ReplaceContentInContainer('box', 'This is the replacement text');
<div class='box'></div>
querySelectorAll 方法 - 它在 CSS 选择器的基础上选择元素。用一个点将你的 CSS 类传递给它,它将返回所有具有指定类的元素作为一个类似数组的对象。
function ReplaceContentInContainer(className, content) {
var containers = document.querySelectorAll(`.${className}`);
for (let i = 0; i < containers.length; i++) {
containers[i].innerHTML = content;
}
}
ReplaceContentInContainer('box', 'This is the replacement text');
<div class='box'></div>
答案 10 :(得分:-1)
jQuery处理起来很简单。
byCar(auckland, hamilton, 103).
byCar(hamilton, raglan, 42).
它将所有.myclass元素更改为该文本。
答案 11 :(得分:-15)
当某些元素缺少ID时,我使用jQuery:
$(document).ready(function()
{
$('.myclass').attr('id', 'myid');
});
这可能是一个奇怪的解决方案,但也许有人觉得它很有用。