node.js 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. module( 'core.node' );
  2. test( 'createElement', function() {
  3. var uNode = UE.uNode;
  4. var node = uNode.createElement('div');
  5. equals(node.tagName,'div','空div ——tagname');
  6. equals(node.type,'element','空div ——节点类型');
  7. node = uNode.createElement('<div id="aa">sdfadf</div>');
  8. equals(node.tagName,'div','非空div——tagname');
  9. equals(node.children[0].data,'sdfadf','非空div——数据内容');
  10. });
  11. test( 'getNodeById', function() {
  12. var uNode = UE.uNode;
  13. var node = uNode.createElement('<div id="aa"><div id="bb"></div>sdfadf</div>');
  14. node = node.getNodeById('bb');
  15. equals(node.getAttr('id'),'bb','获取标签id');
  16. node = uNode.createElement('<div id="aa"><div id="bb"><div id="cc"></div> </div>sdfadf</div>');
  17. node = node.getNodeById('cc');
  18. equals(node.getAttr('id'),'cc','获取标签id');
  19. });
  20. test( 'getNodesByTagName', function() {
  21. var uNode = UE.uNode;
  22. var node = uNode.createElement('<div id="aa"><div id="bb"><div id="cc"></div> </div>sdfadf</div>');
  23. var nodelist = node.getNodesByTagName('div');
  24. equals(nodelist.length,2,'div节点列表长度');
  25. equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<div id="bb"><div id="cc"></div></div>sdfadf','innerHTML内容');
  26. });
  27. test( 'innerHTML', function() {
  28. var uNode = UE.uNode;
  29. var node = uNode.createElement('<div id="aa">sdfadf</div>');
  30. node.innerHTML('<div><div><div></div></div></div>');
  31. var nodelist =node.getNodesByTagName('div');
  32. equals(nodelist.length,3,'div节点列表长度');
  33. for(var i= 0,ci;ci=nodelist[i++];){
  34. ci.tagName = 'p';
  35. }
  36. equals(node.innerHTML(),'<p><p><p></p></p></p>','innerHTML内容');
  37. node = uNode.createElement('<div></div>');
  38. node.innerHTML('asdf');
  39. equals(node.innerHTML(),'asdf','innerHTML内容');
  40. });
  41. test( 'innerText', function() {
  42. var tmp = new UE.uNode.createElement('area');
  43. tmp.innerHTML('<p></p>');
  44. equals(tmp.innerText(),tmp,'标签类型特殊');
  45. tmp = new UE.uNode.createText('');
  46. tmp.innerHTML('<p></p>');
  47. equals(tmp.innerText(),tmp,'对象类型不为element');
  48. var uNode = UE.uNode;
  49. var node = uNode.createElement('<div id="aa">sdfadf</div>');
  50. node.innerHTML('<p>dfsdfsdf<b>eee</b>sdf</p>');
  51. equals(node.innerText(),'dfsdfsdfeeesdf','获取标签中纯文本');
  52. node.innerText('sdf');
  53. equals(node.innerHTML(),'sdf','设置文本节点');
  54. });
  55. test( 'getData', function() {
  56. var tmp = new UE.uNode.createElement('div');
  57. equals(tmp.getData(),'','element元素');
  58. tmp = new UE.uNode.createText('askdj');
  59. equals(tmp.getData(),"askdj",'其他类型');
  60. });
  61. test( 'appendChild && insertBefore', function() {
  62. var uNode = UE.uNode;
  63. var node = uNode.createElement('<div id="aa">sdfadf</div>');
  64. node.innerHTML('<p><td></td></p>');
  65. equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<p><table><tbody><tr><td></td></tr></tbody></table></p>','补全html标签');
  66. var tmp = uNode.createElement('div');
  67. node.appendChild(tmp);
  68. equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<p><table><tbody><tr><td></td></tr></tbody></table></p><div></div>','appendChild');
  69. node.insertBefore(tmp,node.firstChild());
  70. equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<div></div><p><table><tbody><tr><td></td></tr></tbody></table></p>','insertBefore');
  71. node.appendChild(tmp);
  72. equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<p><table><tbody><tr><td></td></tr></tbody></table></p><div></div>','appendChild');
  73. });
  74. test( 'replaceChild && setAttr', function() {
  75. var uNode = UE.uNode;
  76. var node = uNode.createElement('<div id="aa">sdfadf</div>');
  77. node.innerHTML('<p><table><tbody><tr><td></td></tr></tbody></table></p><div></div>');
  78. var tmp = uNode.createElement('p');
  79. tmp.setAttr({'class':'test','id':'aa'});
  80. node.insertBefore(tmp,node.lastChild());
  81. equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<p><table><tbody><tr><td></td></tr></tbody></table></p><p class="test" id="aa"></p><div></div>','setAttr不为空');
  82. node.replaceChild(uNode.createElement('div'),tmp);
  83. equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<p><table><tbody><tr><td></td></tr></tbody></table></p><div></div><div></div>','replaceChild');
  84. node.removeChild(node.lastChild(),true);
  85. tmp = uNode.createElement('p');
  86. tmp.setAttr();
  87. node.insertAfter(tmp,node.lastChild());
  88. equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<p><table><tbody><tr><td></td></tr></tbody></table></p><div></div><p></p>','setAttr为空');
  89. node.innerHTML('<p><td></td></p>');
  90. tmp = uNode.createElement('div');
  91. node.appendChild(tmp);
  92. node.replaceChild(node.firstChild(),tmp);
  93. equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<p><table><tbody><tr><td></td></tr></tbody></table></p>','replaceChild');
  94. });
  95. test( 'insertAfter', function() {
  96. var uNode = UE.uNode;
  97. var node = uNode.createElement('<div id="aa">sdfadf</div>');
  98. node.innerHTML('<p><td></td></p>');
  99. var tmp = uNode.createElement('div');
  100. node.appendChild(tmp);
  101. node.insertAfter(tmp,node.firstChild());
  102. equals(node.innerHTML().replace(/[ ]+>/g,'>'),'<p><table><tbody><tr><td></td></tr></tbody></table></p><div></div>','在第一个子节点后插入');
  103. });
  104. test( 'getStyle', function() {
  105. var uNode = UE.uNode;
  106. var node = uNode.createElement('div');
  107. node.innerHTML('<div style=""><div>');
  108. node = node.firstChild();
  109. equals(node.getStyle(''),'','空cssStyle');
  110. node.innerHTML('<div style="border:1px solid #ccc"><div>');
  111. node = node.firstChild();
  112. equals(node.getStyle('border'),'1px solid #ccc','有border,取border样式');
  113. node.innerHTML('<div style="border:1px solid #ccc"><div>');
  114. node = node.firstChild();
  115. equals(node.getStyle('color'),'','无color样式,取color样式');
  116. node.innerHTML('<div style=" border:1px solid #ccc; background-color:#fff; color:#ccc"></div>');
  117. node = node.firstChild();
  118. equals(node.getStyle('color'),'#ccc','有2个样式,取其一');
  119. });
  120. test( 'setStyle', function() {
  121. var uNode = UE.uNode;
  122. var node = uNode.createElement('div');
  123. node.innerHTML('<div style="border:1px solid #ccc;color:#ccc"><div>');
  124. node = node.firstChild();
  125. node.setStyle('border','2px solid #ccc');
  126. equals(node.getAttr('style'),'border:2px solid #ccc;color:#ccc','修改样式中的一个');
  127. node.setStyle({
  128. 'font':'12px',
  129. 'background':'#ccc'
  130. });
  131. equals(node.getAttr('style'),'background:#ccc;font:12px;border:2px solid #ccc;color:#ccc','添加新样式');
  132. node.setStyle({
  133. 'font':'',
  134. 'background':'',
  135. 'border':'',
  136. 'color':''
  137. });
  138. equals(node.getAttr('style'),undefined,'清空样式');
  139. node.setStyle('border','<script>alert("")</script>');
  140. equals(node.getAttr('style'),"border:&lt;script&gt;alert(&quot;&quot;)&lt;/script&gt;;",'脚本');
  141. equals(node.toHtml(),'<div style=\"border:&lt;script&gt;alert(&quot;&quot;)&lt;/script&gt;;\"><div></div></div>','脚本转html');
  142. node.innerHTML('<div>asdfasdf<b>sdf</b></div>');
  143. node.removeChild(node.firstChild(),true);
  144. equals(node.toHtml(),'<div style=\"border:&lt;script&gt;alert(&quot;&quot;)&lt;/script&gt;;\">asdfasdf<b>sdf</b></div>','移除子节点');
  145. node.innerHTML('<div style="border:1px solid #ccc;color:#ccc"></div>');
  146. node.firstChild().setStyle('border');
  147. equals(node.firstChild().toHtml(),'<div style="color:#ccc"></div>','删除分号');
  148. node.innerHTML('<div style="border:1px solid #ccc;color:#ccc" dfasdfas="sdfsdf" sdfsdf="sdfsdfs" ></div>');
  149. equals(node.firstChild().toHtml(),'<div style="border:1px solid #ccc;color:#ccc" dfasdfas="sdfsdf" sdfsdf="sdfsdfs"></div>');
  150. node.innerHTML('<div style=" border:1px "></div>');
  151. node.firstChild().setStyle('border');
  152. equals(node.firstChild().toHtml(),'<div></div>');
  153. node.innerHTML('<div style=" border:1px solid #ccc; background-color:#fff; color:#ccc"></div>');
  154. node.firstChild().setStyle('border');
  155. equals(node.firstChild().toHtml(),'<div style="background-color:#fff; color:#ccc"></div>');
  156. node.firstChild().setStyle('color');
  157. equals(node.firstChild().toHtml(),'<div style="background-color:#fff;"></div>');
  158. node.firstChild().setStyle('background-color');
  159. equals(node.firstChild().toHtml(),'<div></div>');
  160. });
  161. test( 'getIndex', function() {
  162. var uNode = UE.uNode;
  163. var node = uNode.createElement('div');
  164. node.innerHTML('<div>asdfasdf<b>sdf</b></div>')
  165. node.removeChild(node.firstChild(),true);
  166. var tmp = new UE.uNode.createElement('div');
  167. node.appendChild(tmp);
  168. equals(tmp.getIndex(),2,'节点索引');
  169. });
  170. test( 'traversal', function() {
  171. var uNode = UE.uNode;
  172. var node = uNode.createElement('div');
  173. node.innerHTML('<div>asdfasdf<b>sdf</b></div>')
  174. var count = 0;
  175. node.traversal(function(node){
  176. count++;
  177. });
  178. equals(count,4);
  179. count = 0;
  180. node.traversal(function(node){
  181. if(node.type == 'text'){
  182. count++
  183. }
  184. });
  185. equals(count,2);
  186. node.traversal(function(node){
  187. if(node.type == 'text'){
  188. node.parentNode.removeChild(node)
  189. }
  190. });
  191. equals(node.toHtml(),'<div><div><b></b></div></div>');
  192. node.innerHTML('<div>asdfasdf<b>sdf</b></div>');
  193. node.traversal(function(node){
  194. if(node.type == 'text'){
  195. var span = uNode.createElement('span');
  196. node.parentNode.insertBefore(span,node);
  197. span.appendChild(node);
  198. }
  199. });
  200. equals(node.toHtml(),'<div><div><span>asdfasdf</span><b><span>sdf</span></b></div></div>');
  201. });