1.javascript数组拼接问题varck0=$("leftMe
getElementsByTagName得到的是 HTMLCollection,不能修改,删除,自己for变量压入数组 var arr=[] var ck0=$("leftMenu")。
getElementsByTagName("ul")[1]。 getElementsByTagName("li"); for(var i=0;i getElementsByTagName("li"); for(var i=0;i getElementsByTagName("li"); for(var i=0;i getElementsByTagName("li"); for(var i=0;i全部。
2.如何在JavaScript与ActiveX之间传递数据
在JS等脚本语言与ActiveX控件之间通信,如何传递各种类型的参数,以及COM的IDispatch接口。
使用类似的方法,可以推广到其他所有脚本型语言,如LUA,AutoCad等。 1。
整形数组传参 2。 字符串参数,字符串返回值 3。
修改传入字符串内容 4。 数组参数 5。
IDispatch接口介绍 6。 修改输入数组内容 7。
增加数组内容 8。 以数组传参方式,JS调用S4Execute( )1。
在使用时,有时需要使用数组传参,如S4Execute( )的inBuff/ outBuff。 2。
JS中整形数据不分Byte/ Short/ Int等,因此数组元素类型都为int (COM中的VT_I4,其中I表示整形、4表示4字节)3。 JS中的Array在COM中是一个实现了IDispatch的对象,可通过IDispatch接口api进行操作。
关于IDispatch请看下一节介绍。4。
COM中C 定义IDispatch接口介绍1。 C程序调用时,调用者必须预先知道接口规范(如,参数类型、参数字节长度、参数顺序等)。
由于不同语言这些规范有所不同,COM未解决不同语言之间调用,提供了IDispatch接口。2。
IDispatch要求其实例必须自我描述,即拿到一个对象后,可从对象中直接获取调用方式,而无须预先明确。 3。
IDispatch中通过VT_TYPE来指定相关类型,如 VT_I4为4字节整形、VT_BSTR为unicode字符串,VT_DISPATCH表示是一个IDispatch对象4。 给对象中每一属性或函数(Method)分配一个整形Id和一个字符串name,调用者可以通过name字符串确定如何调用。
如,若name为"length"的属性,调用者就理解为长度。由于这里通常是根据name来理解相应属性,因此name描述应足够准确。
如,以"length()"为名称的函数实现整数相加功能就是不恰当的。5。
使用IDispatch对象时,首相调用 IDispatch::GetIDsOfNames()将属性、函数名称作为参数,获取对应的属性、函数id。 6。
再调用IDispatch::Invoke() 将id作为参数,实际调用功能。7。
若为获取属性值,则 Invoke()调用时,传入 Dispatch_PropertyGet标志。 8。
若为设置属性值,则Invoke()调用时,传入 Dispatch_PropertyPut标志。并在 DispParams参数中指定修该属性改为何值。
DispParams结构说明见后。 9。
若为调用函数,则 Invoke()调用时,传入 Dispatch_Method标志。若该Method需要参数,则通过IDispatch::Invoke()的DispParams参数指定。
修改输入数组内容1。 第五节介绍了如何从JS向COM传递数组参数,以及如何在COM中获取参数。
本节介绍如何在COM中修改JS传入的数组。2。
修改JS数组值时,首先通过GetIDsOfNames获取指定序号元素的dispid;然后调用Invoke(),传入Dispatch_PropertyPut标志表明写操作,并在DispParams结构中指明此元素类型和元素值。
3.怎么把js数组分割成多个数组
/*
* 将一个数组分成几个同等长度的数组
* array[分割的原数组]
* size[每个子数组的长度]
*/function sliceArray(array, size) {
var result = [];
for (var x = 0; x < Math.ceil(array.length / size); x++) {
var start = x * size;
var end = start + size;
result.push(array.slice(start, end));
}
return result;
}