zoukankan      html  css  js  c++  java
  • JS 通过字符串取得对应对象

    //对Array的扩展,查找所有满足条件的元素
        Array.prototype.findAll = function (match) {
            var tmp = [];
            for (var i = 0; i < this.length; i++) {
                if (match(this[i]))
                    tmp.push(this[i]);
            }
            return tmp;
        }
    
    /**
        *作者:xrl
        *通过数符串对到实例
        *例如:PRConfig.comboUISet[id][0]、PRConfig.comboUISet[0].comboUIList[id='2']
        */
        String.prototype.GetInstanceOne = function () {
            function GetObjVal(temp, attrStr) {
                if (temp) {
                    return temp[attrStr];
                } else {
                    return eval(attrStr);
                }
            }
    
            //检查数据格式是否正确
            function CheckArrayFormat(temp, attrStr) {
                var arrtNameRegExpStr = "([_$A-Za-z][_$0-9A-Za-z]{0,254})";//匹配以_$或字母开头的变量名
                var intRegExpStr = "(0|[1-9]*[1-9][0-9]*)"; //大于0正整数
                var DQMarkRegExpStr = '(\".*\")';
                var SQMarkRegExpStr = "(\'.*\')";
                var arrtEqualValRegExpStr = "(" + arrtNameRegExpStr + "=(" + DQMarkRegExpStr + "|" + SQMarkRegExpStr + "|" + intRegExpStr + "))";
    
                var arrtNameRegExp = new RegExp(arrtNameRegExpStr, "i");
                var intRegExp = new RegExp(intRegExpStr, "i");
                var DQMarkRegExp = new RegExp(DQMarkRegExpStr, "i");
                var SQMarkRegExp = new RegExp(SQMarkRegExpStr, "i");
                var arrtEqualValRegExp = new RegExp(arrtEqualValRegExpStr, "g");
    
                var arrExp = new RegExp("^" + arrtNameRegExpStr + "\[" + intRegExpStr + "|" + arrtNameRegExpStr + "|" + arrtEqualValRegExpStr+"\]*$","i");
                if (arrExp.test(attrStr)) {
                    //取得变量名
                    var varname = attrStr.split('[')[0];
                    temp = GetObjVal(temp, varname)//取得该属性名字
    
                    var zkhRegExp =/[[^]]*]/g;
                    var zkhStrArr = attrStr.match(zkhRegExp);
                    for (var j = 0; j < zkhStrArr.length; j++){
                        var zkhStr = zkhStrArr[j];
                        var zkhStrIn = zkhStr.substring(1, zkhStr.length - 1)
                        if (arrtEqualValRegExp.test(zkhStrIn)) {
                            var zkhStrInArr = zkhStrIn.split('=');
                            var zkhStrInAttrName = zkhStrInArr[0];
                            var zkhStrInAttrVal = zkhStrInArr[1];
                            if (DQMarkRegExp.test(zkhStrInAttrVal) || SQMarkRegExp.test(zkhStrInAttrVal)) {
                                var zkhStrInAttrValSub = zkhStrInAttrVal.substring(1, zkhStrInAttrVal.length - 1)
                                temp = temp.findAll(function (obj) {
                                    if (typeof (obj) == "object") {
                                        if (obj[zkhStrInAttrName] == zkhStrInAttrValSub)
                                            return true;
                                    }
                                    return false;
                                });
                            } else if (intRegExp.test(zkhStrInAttrVal)) {
                                temp = temp.findAll(function (obj) {
                                    if (typeof (obj) == "object") {
                                        if (obj[zkhStrInAttrName] == parseInt(zkhStrInAttrValSub))
                                            return true;
                                    }
                                    return false;
                                });
                            }
                        }else if (intRegExp.test(zkhStrIn)) {
                            temp = GetObjVal(temp, zkhStrIn);
                        } else if (arrtNameRegExp.test(zkhStrIn)) {
                            temp=temp.findAll(function (obj) {
                                if (typeof (obj) == "object") {
                                    if (obj[zkhStrIn])
                                        return true;
                                } else if (typeof (obj) == "string") {
                                    if (obj == zkhStrIn) {
                                        return true;
                                    }
                                }
                                return false;
                            });
                        }
                        //如果返回数组只一条数据就将第一条数据对象转换临时对象返回
                        if (temp && temp.length == 1) {
                            temp = temp[0];
                        }
                    }
                } else {
                    throw new SyntaxError('Array String Expression Error!');
                }
                return temp;
            }
    
            var attrPointArr = this.split('.');
            var tempObj = null;
            try {
                for (var i = 0; i < attrPointArr.length; i++) {
                    var attrPoint = attrPointArr[i];
                    //判断是否有数组情况
                    if (attrPoint.indexOf("[") > 0) {
                        tempObj = CheckArrayFormat(tempObj, attrPoint);
                    } else {
                        tempObj=GetObjVal(tempObj, attrPoint);
                    }
                }
            } catch (e) {
                console.error(e);
                return tempObj;
            }
            return tempObj;
        };
  • 相关阅读:
    初识HTML
    CSS字体
    CSS层叠
    CSS选择器
    DOM一致性检测
    javascript中关于value的一个小知识点(value既是属性也是变量)
    IE浏览器下常见的CSS兼容问题
    haslayout详解
    去除IE6浏览器下获得焦点的元素的虚线框的两个小办法
    引入CSS
  • 原文地址:https://www.cnblogs.com/xiaoruilin/p/9064203.html
Copyright © 2011-2022 走看看