搜索
aardio官方社区 门户 查看主题

请教getElementsByTagName的用法

发布者: 82063306 | 发布时间: 2018-2-11 17:06| 查看数: 98| 评论数: 8|帖子模式

我是一个刚学习的新手,被能内嵌浏览器的功能吸引。
请教一个问题,我引用了miniblink内核,不想使用querySelector,想通过getElementsByTagName获得一个DIV的集合,请问该怎么写?

最新评论

Jacen.He 发表于 2018-2-11 17:37:06
miniblink 调用JS函数有一点问题,不太正常。
目前 querySelector 我是用 eval 执行JS封装了一下,返回的节点有时候也不太正常,象数组这些取出来的内容都比较奇怪。

用eval之类的函数执行JS试试。
松江 发表于 2018-2-11 18:11:27
用法都是一样的吧?
  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = win.form(text="aardio form";right=759;bottom=469)
  4. winform.add()
  5. /*}}*/

  6. import web.blink.form;
  7. var mb = web.blink.form(winform);
  8. mb.html = /**
  9. <!doctype html>
  10. <html>
  11. <head>
  12.     <meta charset="utf-8"/>
  13. </head>
  14. <body>
  15.     <div id="container">
  16.         <div class="lside">
  17.                 <button>一个按钮</button>
  18.         </div>
  19.         <div class="rside"> 呵呵 </div>  
  20.     </div>
  21. </body>
  22. </html>
  23. **/
  24. mb.waitDoc();
  25. var eles = mb.document.getElementsByTagName("div");
  26. import console;
  27. console.log("总共有元素:",eles.length)
  28. for(i=0;eles.length - 1;1){
  29.         console.log(eles[ i ].outerHTML)
  30.         console.log("----------------分割线----------------")
  31. }


  32. winform.show()
  33. win.loopMessage();
复制代码


引用代码不算到字符数里面的吗?
Jacen.He 发表于 2018-2-11 20:34:41
松江 发表于 2018-2-11 18:11
用法都是一样的吧?

你这个确实试了可以,我以前测试是不行的,例如querySelector ,我是这样打了补丁才能执行:
querySelector = function(selectors){
               return owner.eval('document.querySelector("%s")',selectors);
               if(doc) return doc.querySelector(...);
};

而返回的DOM对象,也有些奇怪,例如调用dispatchEvent我也打了一个很奇怪的补丁:
if( k && (k!="aardioCallObject") ){
   
if( k!="dispatchEvent"){
        
var aardioCallObject = jsEval(jsExecState,"return aardioCallObject");
        
if( jsTypeOf(aardioCallObject) == 4/*JSTYPE_FUNCTION*/ ){
            
return function(...){
               
var args = {thisObject;k;...};
               
var _,len = ..table.range(args);
               
var jsargs;
               
if(len){
                    jsargs = { LONG args[] = {} };
                    
for(i=1;len;1){
                        ..table.push(jsargs.args,jsBuildValue(jsExecState,args[ i ]));
                    }
                }
               
else {
                    jsargs = {};
                }
               
return jsParseValue( jsExecState,jsCallGlobal(jsExecState,aardioCallObject,jsargs,len) );
            }
        }
    }
   
else {
        
var aardioDispatchEvent = jsEval(jsExecState,"return aardioDispatchEvent");
        
if( jsTypeOf(aardioDispatchEvent) == 4/*JSTYPE_FUNCTION*/ ){
            
return function(...){
               
var args = {thisObject;...};
               
var _,len = ..table.range(args);
               
var jsargs;
               
if(len){
                    jsargs = { LONG args[] = {} };
                    
for(i=1;len;1){
                        ..table.push(jsargs.args,jsBuildValue(jsExecState,args[ i ]));
                    }
                }
               
else {
                    jsargs = {};
                }
               
return jsParseValue( jsExecState,jsCallGlobal(jsExecState,aardioDispatchEvent,jsargs,len) );
            }
        }
    }
   
}
  

我说数组有时候有问题,举个例子,以webkit范例里的数组为例:
import win.ui;
/*DSG{{*/
var winform = win.form(text="webkit - aardio操作js对象";right=1123;bottom=570)
winform.add(
edit={cls=
"edit";left=898;top=26;right=1363;bottom=539;db=1;dr=1;dt=1;edge=1;multiline=1;vscroll=1;z=1}
)
/*}}*/

import web.blink.form;  
var wb = web.blink.form(winform);

//使用external接口定义网页脚本可调用的本地函数
wb.external = {  
    aardioCall =
function(object){
        
        
for(i=1;10;1){
            
            winform.edit.print( object.array.length )
        }
        
    };
}

wb.html =
/**  
    <a href='javascript:
    external.aardioCall({
        url:"服务端URL",
        param:{a:1,b:2,c:3},
        array:[11,12,13,14,15]
    }); '>调用aardio函数external.aardioCall()操作JS对象、数组</a>
**/


winform.edit.orphanWindow();

winform.show()
win.loopMessage();

数组长度每取一次,都会不同,而且不断增长,而且数组取出的元素也比较奇怪。



松江 发表于 2018-2-11 20:56:07
Jacen.He 发表于 2018-2-11 20:34
你这个确实试了可以,我以前测试是不行的,例如querySelector ,我是这样打了补丁才能勉强执行:

而返 ...
  1. querySelector = function(selectors){
  2.                return owner.eval('document.querySelector("%s")',selectors);
  3.                if(doc) return doc.querySelector(...);
  4. };
复制代码

这个代码没看明白,前面已经return 了,后面的应该不会执行得到吧?是不是从web.kit库里复制忘删了
而且上面的格式化会有个问题,就是如果selectors里也包含了双引号的话,就不对了,比如:
<div abc="一个  属性值">123</div>
假如用户传入参数 div[abc="一个  属性值"]
松江 发表于 2018-2-11 21:01:18
Jacen.He 发表于 2018-2-11 20:34
你这个确实试了可以,我以前测试是不行的,例如querySelector ,我是这样打了补丁才能勉强执行:

而返 ...

对的,我也是一般尽量使用js来处理,如果一定要传参,也尽量使用字符串或通过json字符串来完成传递
82063306 发表于 7 天前
谢谢各位的回复!
用var eles = mb.document.getElementsByTagName("div");可以获得元素集合
Jacen.He 发表于 7 天前
松江 发表于 2018-2-11 21:01
对的,我也是一般尽量使用js来处理,如果一定要传参,也尽量使用字符串或通过json字符串来完成传递

感谢松江反馈,miniblink新版中JS数组已经可以正常调用了。
web.blink 扩展库已更新,修正获取JS数组异常。修正获取JS对象键名数组异常。修正 web.blink.fileSystem异常等问题。

但是试了把一些补丁代码删除,仍有部分DOM函数执行后没有任何反应,有些又可以,所以把补丁又放回去了。没时间进一步测试,大家如果使用没问题,那就没问题。
松江 发表于 7 天前
Jacen.He 发表于 2018-2-12 15:47
感谢松江反馈,miniblink新版中JS数组已经可以正常调用了。
web.blink 扩展库已更新,修正获取JS数组异 ...

谢谢!刚刚测试了,非常棒!!
~~~~~~~~~~~~~~~~~~~~~~~~~~~

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-2-19 17:49 , Processed in 0.062500 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表