`
java378656992
  • 浏览: 40649 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

jquery 扩展,动态提取或填充表单元素数据

 
阅读更多


_jsonDataGetValue=function(elmt,container){
    var format=elmt.attr("format"),type=elmt[0].type;
    if(type=="radio"){
        return elmt[0].checked ? elmt[0].value : (elmt.attr("uncheckvalue")|| "");
    }else if(type=="checkbox"){
        var isArray=elmt.attr("isArray");
        var split=elmt.attr("split")|| ",";
        var values=[];
        var chks=container.find("input[name='"+elmt[0].name+"']:checked");
        for (var i=0; i < chks.length; i++) {
            values.push(chks[i].value);
        };
        return isArray ? values : values.join(split);
    }esle if(format=="date" || format=="datetime"){
       
       
    }else{
        return elmt.val();
    }
}
/**
 *@param {jqDom} elmt
 *@param {String} value 
 */
_jsonDataSetValue=function(elmt,value){
    var tagName=elmt[0].tagName,type=elmt[0].type;
    if(tagName=="LABEL"){
        elmt.text(value);
    }else if(type=="radio"){
        (value==elmt[0].value) ? (elmt[0].checked=true) : elmt.removeAttr("checked");
    }else if(type=="checkbox"){
        if(value !==null){
            var values=(""+value).split(elmt.attr("split") || ",");
            for (var i=0; i < values.length; i++) {
                 if(values[i]==elmt[0].value){
                     elmt[0].checked=true;
                     return;
                 }
            };
            elmt.removeAttr("checked");
        }else{
            elmt.removeAttr("checked");
        }
    }else{
        elmt.val(value);
    }
}
/**
 * 拿到本dom容器中的所有输入元素(:input)的value,根据元素name 生产一个json格式的数据集对象返回。
 * 或将一个json格式的数据对象填充或绑定的本dom容器form元素中
 * @param {Object} data 需要填充或绑定到本dom容器元素中 的数据
 */
$.fn.jsonData=function(data){
    //声明将要用到的变量
    var elmtName,elmtValue,elmt,elmts=this.find(":input[name]").toArray();

    //判断是否传递了用于填充的数据对象
    if(data && typeof data=="object"){
        //如果传递了 data参数,则将data中的数据绑定到容器中的form元素中
        elmts=elmts.concat(this.find("label[name]").toArray());
        for(var i=0;i<elmts.length;i++){
            elmt=$(elmts[i]);
            elmtName=elmt.attr("name");
            //根据elmtName取出data中相对应得数据
            try{elmtValue=eval("data."+elmtName);}catch(e){}
            if(typeof elmtValue!="undefined"){
                _jsonDataSetValue(elmt,elmtValue);
            }
        }
      return this;
    }else{
        //如果没有任何参数,则需取出容器中的输入元素值,根据其name封装成对象返回
        //用户缓存已经 设置或读取过的 name 属性,(相同name元素在同一次jsonData操作中的不会读取第二次)
        var currObj={};
        var  cache={};
        for(var i=0;i<elmts.length;i++){
            elmt=$(elmts[i]);
            elmtName=elmt.attr("name");
            if(cache[elmtName]){
                //如果该同名元素已经读取过,将跳过该元素
                continue;
            }
         
            var attrs=elmtName.match(/[a-zA-Z0-9_]+/g);
            for (var j=1; j < attrs.length-1; j++) {
                if(typeof currObj[attrs[j-1]]!="object"){
                    if(isNaN(attrs[j])){
                        currObj=currObj[attrs[j-1]]=currObj[attrs[j-1]] || {};
                    }else{
                        currObj=currObj[attrs[j-1]]=currObj[attrs[j-1]] || [];
                    }
                }
            };
            var lastAttr=attrs[attrs.length-1];
            if(!isNaN(lastAttr)){
                lastAttr=parseInt(lastAttr);
            }
            currObj[lastAttr]=_jsonDataGetValue(elmt,this);
            //读取后,缓存该名称,下次同名元素将不再读取,直接跳过
            cache[elmtName]=true;
        }
           
        return currObj;
    }
}

分享到:
评论

相关推荐

    Jquery实现ajax三级联动

    5. **处理XML数据:**在jQuery中,可以使用`$.parseXML()`函数将XML字符串解析成一个XML文档对象,然后使用`find()`或`children()`方法遍历XML节点,提取所需数据。 6. **创建选项:**根据获取的数据,我们可以使用...

    AutoFillFormField:这是一个 MediaWiki 扩展,它根据其他输入的内容自动填充表单输入字段

    AutoFillFormField 是一个专为 MediaWiki 设计的扩展,它主要功能是自动化填充表单中的输入字段。这个扩展基于 JavaScript 开发,利用了 MediaWiki 的强大功能,为用户提供了更加智能和便捷的填写表单体验。...

    jQuery相关资料jQuery相关资料

    "jquery.form"可能是一个jQuery插件,用于增强表单处理,特别是提交表单和处理表单数据的Ajax请求,使得表单提交更加流畅,用户体验更好。 总的来说,这个压缩包提供了关于jQuery及其周边生态的多种资源,对于学习...

    jquery.form.js:将地址栏的参数初始化到表单

    注意,这里假设表单字段是`&lt;input&gt;`元素,但你可以根据实际情况调整,适应其他类型的表单控件(如`&lt;select&gt;`或`&lt;textarea&gt;`)。 在实际应用中,可能还需要考虑一些边界情况,例如处理多个同名的表单字段,或者处理...

    一个可视化浏览器自动化测试_数据采集_爬虫软件,可以无代码图形化的设计和执行爬虫任务

    1. **无代码爬虫设计**:通过图形界面,用户可以选择和配置各种爬取策略,如遍历链接、填充表单、处理验证码等。 2. **自动化测试**:模拟用户操作,验证网站功能,比如登录、注册、搜索等流程。 3. **数据采集**:...

    jsoup-1.8.1.jar

    - 网页自动化:填充表单、模拟点击等操作,辅助测试或脚本编写。 - 内容迁移:将网站内容迁移到新的平台或格式。 在【764581d90e8e4cb98d749acdc3ba89bd】这个文件中,虽然具体内容未知,但通常会包含jsoup库的源...

    2010最新解析html开源项目jsoup源码及api下载及jsoup.jar

    6. **表单处理**:填充表单数据并提交。 7. **链接处理**:解析和验证链接,处理相对URL。 **应用场景** jsoup适用于多种场景,如: 1. **数据抓取**:从网页中抽取特定信息,如新闻标题、评论、价格等。 2. **...

    java网页抓取Jsoup包全

    4. **表单处理**:Jsoup可以填充和提交HTML表单,模拟用户交互,这对于自动化测试和数据提交很有用。 5. **清理和验证**:Jsoup可以清洗HTML,移除恶意脚本和无效标签,保证提取的数据安全可靠。同时,它也能验证...

    chrome扩展程序直接进入教室

    3. **内容脚本**:内容脚本可以直接操作网页DOM(文档对象模型),在用户界面上进行注入元素、改变样式、提取数据等操作。在这个情况下,内容脚本可能用于识别和填充登录表单,或者与教学平台的API进行通信。 4. **...

    基于PHP的新秀企业网站系统源码.zip

    PHP常用于构建动态交互式的网站,它支持多种数据库(如MySQL),可以处理表单数据,生成动态网页内容,实现用户登录、注册、内容管理等常见功能。这款企业网站系统可能包括了这些常见的Web应用模块。 在【压缩包子...

    LotoProVietNam-Tool-crx插件

    【LotoProVietNam-Tool-crx插件】是一款针对越南语用户设计的浏览器扩展程序,主要用于自动化处理和访问网络页面,尤其是与LD789网站相关的数据提取。这款插件能够有效地节省用户手动操作的时间,提高工作效率,尤其...

    详解Node使用Puppeteer完成一次复杂的爬虫

    4. **页面交互**:使用 `page.evaluate()` 在浏览器上下文中执行 JavaScript,进行元素选择、点击、填充表单等操作。 5. **数据提取**:通过 `page.$eval()` 或 `page.$$eval()` 获取页面元素内容。 6. **保存或发送...

    screen-scraping:Nodejs ile屏幕抓取

    除了基本的HTML抓取,我们还可以处理更复杂的情况,如登录、填充表单、处理JavaScript动态加载的内容等。例如,对于需要登录才能访问的页面,可以使用`request`库的`form`选项发送POST请求,携带用户名和密码。对于...

Global site tag (gtag.js) - Google Analytics