调试说obj.getElementsByTagName is not a function,怎么解决?

来源:6-3 使用JS实现函数

苍白的尾巴

2016-07-22 11:54

window.onload = function(){
	window.onscroll = function(){
		var top = document.documentElement.scrollTop || document.body.scrollTop;
		var menus = document.getElementById('menu').getElementsByTagName('a');
		var items = getByClassName("document.getElementById('content')",'item');
		var currentId = "";
		/*console.log(top);*/
		for (var i = 0; i < items.length; i++) {
			var _item = items[i];
			var _itemTop = _item.offSet;
			if(top > _itemTop -200){
				currentId = _item.id;
			}else{
				break;
			}
		}
		if(currentId){
			for (var j = 0; j < menus.length; j++) {
				var _menu = menus[i];
				var _href = _menu.href.split('#');
				if(_href[_href.length-1] !=  currentId){
					removeClass('_menu','current');
				}else{
					addClass('_menu','current');
				}
			}
		}
	}
}
/*根据className找元素*/
function getByClassName(obj,cls){
	var elements = obj.getElementsByTagName('*');
	var result = [];
	for (var i = 0; i < elements.length; i++) {
		if(elements[i].className == cls){
			result.push(elements[i]);
		}
	}
	return result;
}
function hasClass(obj,cls) {
	return obj.className.match(new RegExp("(\\s|^)"+cls+"(\\s|$)"));
}
function removeClass(obj,cls) {
	if(hasClass(obj,cls)){
		var reg = new RegExp("(\\s|^)"+cls+"(\\s|$)");
		obj.className = obj.className.replace(reg,"");
	}
}
function addClass(obj,cls) {
	if(!hasClass(obj,cls)){
		obj.className += " " + cls;
	}
}

这句话我的拼写没错误啊?

写回答 关注

1回答

  • ParkerYoung
    2016-07-24 10:19:05
    已采纳

    好多错误啊!

    var items = getByClassName("document.getElementById('content')",'item');

    第一这里用了双引号括住导致变了字符串,所有getByClassName函数解释不到对象OBJ所以报错,

    var _itemTop = _item.offSet;

    这里获取了item的偏移值,但没获取偏移的高应该.offsetTop

            if(currentId){

                for (var j = 0; j < menus.length; j++) {

                    var _menu = menus[i];

                    var _href = _menu.href.split('#');

                    if(_href[_href.length-1] !=  currentId){

                        removeClass('_menu','current');

                    }else{

                        addClass('_menu','current');

                    }

                }

            }

    这一段两处错误,变量值为j,你却引用了i,导致循环都没用的情况_menu获取不到对象,应该menu[j];

    removeClass和addClass函数都用obj参数都用了单引号写成字符串 也是没对象

    苍白的尾巴

    非常感谢!

    2016-07-25 09:21:14

    共 1 条回复 >

网页定位导航特效

本课程讲解网页定位导航特效,仿天猫版地狗购物网,你值得拥有

71396 学习 · 486 问题

查看课程

相似问题