Open VaJoy opened 8 years ago
草,第一题答案忘了擦除就发了,大家别看邮件:sweat:
function countElm (root) {
var count=0;
var len=root.childNodes.length;
if(len==0){
return 0;
}else{
for(var i=0;i<len;i++){
var _node=root.childNodes[i];
if(_node.nodeType==1){
count++;
}
count+=countElm(_node);
}
return count;
}
}
function printAttributes(elm){
var pairs=[],attrName,attrValue,i,len;
for(i=0,len=elm.attributes.length;i<len;i++){
attrName=elm.attributes[i].nodeName;
attrValue=elm.attributes[i].nodeValue;
//specified 表示html元素中是否真正指定了值
if(elm.attributes[i].specified){
pairs.push(attrName+"=\""+attrValue+"\"\n");
}
}
return pairs.join('');
}
li = document.getElementsByTagName('li'); li的length会实时变动,len应该先赋值 应该采用documentfragement进行append,优化性能
1.
function countElm(root) {
//TODO:完成它
var count=0;
var len=root.childNodes.length;
for(var i=0;i<len;i++){
if(root.childNodes[i].nodeType==1){
count++;
count+=countElm(root.childNodes[i]);
}
}
return count;
}
console.log(countElm(document.body)); //6,即2个div、1个ul、2个li、1个script
3.document.anchors,包含文档中带有name特性的元素, document.links,包含文档中带有href特性的元素 4.显示2和3 6. var ul = document.getElementsByTagName('ul')[0], li = document.getElementsByTagName('li'), len = li.length; for(var i=0; i<len; i++){ var new_li = document.createElement('li'); ul.appendChild(new_li) }
function walkNode(elem){
var len = elem.children.length, count = 0
if(len){
count += len;
[].forEach.call(elem.children, (elem) => {
console.log(elem.tagName);
count += walkNode(elem);
})
}
return count;
}
walkNode(document.getElementById('element'));
247-285页(第十章)
答案将于一周后更新于本贴,大家可以跟帖写答案看自己对基础知识的掌握程度如何。 跟帖回答案的都应自行思考完成,不然没有任何意义
1.写一个函数,遍历某个节点,返回该节点所拥有的所有后代节点(element类型)的数量:
2.主域相同、子域不同的跨域通信模拟
模拟2个主域相同子域不同的页面,比如
http://www.abc.com:8080/sop/a.html
和http://abc.com:8080/sop/b.html
,在a.html
页面插入b.html
页面(iframe),并在a.html
页面中将b.html
上的div
内容修改为“OK”。 P.S. 你可以通过修改host来模拟跨域:a.html
b.html
3.
document.anchors
和document.links
的区别是什么?4.说说下方html对应的页面最终会显示什么内容:
5.编写一个方法,用来打印一个节点的所有指定的特性,要求兼容旧IE
6.说说下方代码存在什么问题,以及如何解决(试着说出2种解决方案)