getElementByClass它存在于vanilla js中吗? UHN?

时间:2011-05-04 10:12:04

标签: javascript dom javascript-events

<p id ="myP">

 Render this text using the myC class </p>
---------------------------
.teststyle {
    background-color:#00ff00;
    font-size: 200%;
}
---------------------
window.onload = load;           

function load(){
         document.getElementById("myP").className = "teststyle";
}
----------------------

使用jsfiddle.net和JavaScript我发现JS中不支持“getElementByClass”。我想知道为什么?如果我的XTHML代码中有一个类,如何转换此代码怎么办?

我注意到的另一个奇怪的事情是:如果我在xhtml中使用onload = "load()"将不会像js-code中的"windows.load"那样工作......为什么会这样?应该是一样的,也许只是我......谢谢!

3 个答案:

答案 0 :(得分:5)

不,不,因为函数的名称是:

getElementsByClassName
//        ^       ^^^^

Note that it is not support in IE before IE9.

Have a look at the documentation of getElementsByClassName.

关于onload问题:如果没有更多代码,很难说出你做错了什么。如果你这样做

<body onload="load()">

它会起作用。但是,无论如何都应该避免这样做(在HTML中附加事件处理程序)。

答案 1 :(得分:1)

  

我发现JS,uhn不支持“getElementByClass”?有趣的想知道为什么?

因为JS中没有本机DOM操作。这是一个单独的API(由浏览器,其他一些JS环境提供,libraries提供给其他环境。)

...但是为了这个问题的目的,你可能会将浏览器DOM实现作为JS的一部分来计算:

因为class不是通用的DOM概念,所以它是特定于HTML的(或至少以这种方式开始)。 getElementsByClassName(注意名称!)是草稿规范中的新功能,并非所有浏览器都已实施。

  

那么如果我在XTHML代码中有一个类怎么能转换这个代码呢?

你没有在该代码中使用getElementsByClassName,所以它没有多大意义。

有很多第三方库提供了基于它们所属的类获取元素的方法。有些实现了getElementsByClassName,有些只是实现了选择器引擎(比如YUI和jQuery)。

  

我注意到的另一个奇怪的事情是:如果我在xhtml中使用onload =“load()”将无法正常运行,就好像我在js-code中有“windows.load”一样...... dat怎么样?它应该是一样的,也许只是我......谢谢!

一个会覆盖另一个。

答案 2 :(得分:1)

function getElementsByClassName( strClassName, obj ) {
    var ar = arguments[2] || new Array();
    var re = new RegExp("\\b" + strClassName + "\\b", "g");

    if ( re.test(obj.className) ) {
        ar.push( obj );
    }
    for ( var i = 0; i < obj.childNodes.length; i++ )
        getElementsByClassName( strClassName, obj.childNodes[i], ar );

    return ar;
}

用法:

var aryClassElements = getElementsByClassName( 'findMe', document.body );

来自:http://www.tek-tips.com/viewthread.cfm?qid=1143850&page=1

你们在发布这里之前搜索谷歌吗?