打开/关闭菜单
Toggle preferences menu
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

MediaWiki:Gadget-tikuRenderModule.js:修订间差异

MediaWiki界面页面
无编辑摘要
(导入1个版本)
 
(未显示同一用户的176个中间版本)
第1行: 第1行:
function getdata(){
//设置
            var data = $('.data')
var prefixDic = {
             var dataLength = data.length
    formId:'timuForm-',
             var subjectCon = $('.subjectContainer')
    radioName:'radio-',
             console.log(data)
    radioId:'radio-input-',
             $('<button class="button" id="typeAReset">重置答题状态</button>').prependTo($('#subjectContainer-A'))
    checkBoxName:'checkbox-',
             $('<button class="button" id="typeBReset">重置答题状态</button>').prependTo($('#subjectContainer-B'))
    checkBoxId:'checkbox-input-',
            $('<button class="button" id="typeCReset">重置答题状态</button>').prependTo($('#subjectContainer-C'))
    selectId:'select-',
             $('<button class="button" id="typeXReset">重置答题状态</button>').prependTo($('#subjectContainer-X'))
    selectName:'select-',
            $('#typeAReset').bind("click",function (){
    textInputName:'text-',
                 reset(dataLength,"A")
    textInputId:'text-'
}
 
 
//主函数
function renderTimuFromSessionStorage(){
var timuList = gDomTimuList()
// console.log(timuList)
var order = timuList.order
var timu = timuList.timu
var errors = timuList.errors
var repeatSource = timuList.repeatSource
for(var i=0;i<order.length;i++){
if(order[i].isError){
var errorWidget = new OO.ui.MessageWidget( {
type: 'error',
showClose:true,
label: 'id='+i+'的题目加载错误,错误信息:'+errors[i].info.name+':'+errors[i].info.message+'\n'+'对应文本:'+errors[i].dataText
} )
render(i,'A',$('<di></div>').append(errorWidget.$element,'<hr>'))
}else{
var dataJSON = timu[i].dataJSON
             var o = newTimu(i,dataJSON,{})[dataJSON.type]()
            render(i,dataJSON.type,o)
             var needCheck = $('#noRepeatCheck').length<=0
             if(repeatSource[i]!==undefined&&needCheck){
            var warningWidget = new OO.ui.MessageWidget( {
type: 'warning',
label: '本题与本页面id为'+repeatSource[i]+'的题目source参数重复,本参数重复可能引起错误,请检查并修改!'
} )
render(i,'A',warningWidget.$element)
             }
}
}
}
 
 
//题目渲染函数
//生成info
function infoInline(info){
    return $('<div class="info">'+info+'</div>')
}
//单行题干的处理titleInline(type, source, title)
//生成titleGroup
function titlesGroup(titlesList){
    var group = $('<div class="titlesGroup"></div>')
    for(var i=0;i<titlesList.length;i++){
        group.append(titlesList[i])
    }
    return group
}
//生成titleInline
function titleInline(id, type,originalSource, sourceSuffix,title, classes){
    classes = classes===undefined?'':classes
    return $('<div id="title-'+id+'" class="'+classes+'"></div>').append(
            titleInlineType(type),
            titleInlineSource(originalSource,sourceSuffix,type),
             titleInlineTitle(title)
        )
}
function titleInlineType(type){
    var typeChinese = {
        A:'A',
        A2:'A2',
        A3:'A3',
        B:'B',
        C:'C',
        X:'X',
        TK:'填空',
        PD:'判断',
        MJ:'名解'
    }
    return $('<p class="type">'+typeChinese[type]+'</p>')
}
//从有中文的source中提取最后一个连续数字作为真实的source
function getRealSource(source){
    // console.log(source)
var getContinueNumber = source.match(/[0-9]+/g)
var splitContinueNumber = source.split(/[0-9]+/g)
    var realSource = getContinueNumber[getContinueNumber.length-1]*1
    var prefix = ''
    for(var i=0;i<getContinueNumber.length;i++){
    prefix += splitContinueNumber[i]
    }
    return {prefix:prefix,source:realSource}
}
//返回source的obj
function titleInlineSource(originalSource, suffix , type){
    var realSource = type==='A3'?{prefix:'', source:originalSource}: getRealSource(originalSource)
   
    var prefix = realSource.prefix
    var source = realSource.source
    var suffix = suffix === undefined ? '':'-'+suffix
 
    return $('<p class="source">'+prefix+source+suffix+'</p>')
}
//返回sourceRange的obj
function rangeInline(originalSource, sourceRange, type){
    var source = getRealSource(originalSource).source
    var end = source*1+sourceRange*1 -1
 
    var rangeText = '第 '+source +' 到 ' + end + ' 题'
    var suffix = type==='B'?'共用备选答案':'共用题干'
 
    return $('<div class="sourceRange">'+rangeText + suffix +'</div>')
}
//返回title 的 obj
function titleInlineTitle(title){
    return $('<p class="title">'+title+'</p>')
}
//生成buttonGroup
function buttonGroup(showSubmitBtn, showEditBtn, id, type, correctAnswer, hoverTarget){
    // console.log(showEditBtn)
    var buttonGroupObj = $('<div class="buttonGroup"></div>')
    if(showSubmitBtn){buttonGroupObj.append(
        new OO.ui.ButtonWidget( {
            id:'showThisAnswer-'+id,
            label: '提交',
            flags: [
                'progressive'
            ]
        } ).$element.bind("click",function (){
            showThisAnswer(id,type,correctAnswer)
        })
    )}
    if(showEditBtn){
        buttonGroupObj.append(
             // $('<a class="editThisBtn" style="" href="javascript:void(0)"><span class="" id="editThis-' + id + '">题目有误?点击编辑本题</span></a>'),
            new OO.ui.ButtonWidget( {
                id:'editThis-' + id,
                classes:['editThisBtn'],
                framed: false,
                flags: [
                    'progressive'
                ],
                icon: 'edit',
                label: '题目有误?点击编辑本题'
            } ).$element.bind("click",function (){
                 editThis(id)
             })
             })
            $('#typeBReset').bind("click",function (){
        )
                reset(dataLength,"B")
        hoverTarget.hover(function () {
             })
             buttonGroupObj.children('.editThisBtn').fadeIn(10)
            $('#typeCReset').bind("click",function (){
        },function (){
                reset(dataLength,"C")
             buttonGroupObj.children('.editThisBtn').fadeOut(70)
             })
        })
            $('#typeXReset').bind("click",function (){
    }
                reset(dataLength,"X")
    return buttonGroupObj
            })
}
            for(var i=0;i<dataLength;i++){
//resultGroup: answer和explain的显示框
                var singleData = $(data[i]).text()
function resultGroup(id, items, answerInline,explainInline){
                console.log(singleData)
    var group = $('<div id="resultGroup-'+id+'" class="resultGroup"></div>')
                var jsonData = $.parseJSON(singleData)
    for(var i=0;i<items.length;i++){
                console.log(jsonData)
        group.append(items[i])
                console.log(jsonData.type)
    }
                eval('type'+jsonData.type+'Module('+i+')')
    return group
                eval('type'+jsonData.type+'('+jsondata+','+i+')')
}
             
//生成answerInline
             }
function answerInline(answer){
    return $('<div class="answerInline"><label>正确答案:</label>'+answer+'</div>')
}
//生成explainInline
function explainInline(explain){
    return $('<div class="explainInline"><label>解析:</label>'+explain+'</div>')
}
 
//生成subject 的form, 顺序items顺序添加 (title, options, buttonGroup)
function subjectFrom(id, type, items){
    var form =  $('<form id="'+prefixDic.formId+id+'" class="subjectForm"></form>')
    //绑定变化事件
    form.change(function(){
    // 如果开启了暂存,则暂存
        if(!gWebPageTimuSettings().noTemp){
             formChangeListener(id, type)
         }
         }
         function removeBackground(obj){
    })
             obj.addClass('no-background')
    for(var i=0;i<items.length;i++){
        form.append(items[i])
    }
    return form
}
function subjectDIV(id,type,items){
    var div=  $('<div id="'+prefixDic.formId+id+'" class="subjectForm"></div>')
    for(var i=0;i<items.length;i++){
         div.append(items[i])
    }
    return div
}
 
//生成填空输入框
function fillBlank(id, title, pos, classes){
    // console.log(pos)
    var posReg = new RegExp(pos,'g')
    var blankLen = title.match(posReg).length
    var split = title.split(posReg)
    // console.log(blankLen)
    var newTitle = ''
    for(var i=0;i<(blankLen+split.length);i++){
        if(i%2===0){
             newTitle +=  '<p class="title">'+split[Math.floor(i/2)]+'</div>'
        }else{
            newTitle +=  new OO.ui.TextInputWidget( {
                name:prefixDic.textInputName+id+'-'+Math.floor(i/2),
                id:prefixDic.textInputId+id+'-'+Math.floor(i/2),
                classes:classes
            } ).$element.prop('outerHTML')
         }
         }
         function showChoiceAnswer(id,type){
          
            var subjectCon = $('#'+id)
    }
            var titleCon = subjectCon.children('.subject').children('.titleContainer')
    return newTitle
            var ansCon = subjectCon.children('.ansContainer')
}
            var answers = subjectCon.children('.subject').children('.answers')
//生成B、C型题的选择框
            var correctAns= ansCon.children('.correctAnswer')
function dropDownInputWidget(id, availabelOptions){
            console.log(id)
    var options = []
            if(type=="A"){
    var select = $('<select class="dorpdown" id="'+prefixDic.selectId+id+'" name="'+prefixDic.selectName+id+'"></select>')
                var correctAnsText = correctAns.text()
    for(var i=0;i<availabelOptions.length;i++){
                var choice = $('input[name="singelChoice-'+id+'"]:checked').val();
        select.append('<option class="dropdown-option" value="'+availabelOptions[i]+'">'+availabelOptions[i]+'</option>')
                console.log(choice)
    }
                var showCorrect = answers.children('#'+correctAnsText)
    return select
                var showChoice = answers.children('#'+choice)
}
                $('#showSingle-'+id).addClass('noDisplay')
//生成options(options 是 Map对象)
                ansCon.fadeIn(100)
function optionsGroup(type,id,options){
                if(choice==correctAnsText){
    var flexClass = (type==='B')||(type==='C') ? 'optionsGroup-flex':''
                    showCorrect.addClass('correct')
    var inputType = type==='X' ? 'checkbox':'radio'
                }else{
    var optionGroupObj = $('<div class="optionsGroup '+flexClass+'"></div>')
                    showCorrect.addClass('correct')
    options.forEach(function(value, key, map){
                    showChoice.addClass('wrong')
        optionGroupObj.append(optionInline(id, key, value, !((type==='B')||(type==='C')), inputType))
                }
    })
                setTimeout(function (){
    return optionGroupObj
                    removeBackground(showChoice)
}
                    removeBackground(showCorrect)
//生成optionInline
                }, 4000);
function optionInline(id, option, content,input,inputType){
    var idPrefix = inputType === 'checkbox' ? prefixDic.checkBoxId:prefixDic.radioId
    var namePrefix = inputType === 'checkbox' ? prefixDic.checkBoxName:prefixDic.radioName // 这个和外部的div的id一样就共用了
 
    var input = input ? $('<input id="'+ idPrefix + id+'-'+option+'" name="'+ namePrefix + id + '" type="'+inputType+'" value="' + option + '" />'):''
    var optionLabel = $('<label for="'+ idPrefix + id+'-'+option+'">'+option+'. </label>')
    var contentLabel = $('<label for="'+ idPrefix + id+'-'+option+'">'+content+'</label>')
    return $('<div id="'+ namePrefix +id+'-'+option+'" class="optionInline"></div>').append(input,optionLabel,contentLabel)
}
//清理json中的choice(清除空项并排序),接收Obj,
function cleanAndMakeSameLenOptions(options){
//清除空项
var options = filterEmptyEntries(options)
//让所有option长度一样
var maxOptionLen = getStrLength(Object.values(options).sort(function(a,b){return getStrLength(b) - getStrLength(a)})[0])
for(var i in options){
var minus = maxOptionLen - getStrLength(options[i])
for(var n=0;n<minus;n++){
options[i] += '&ensp;'
}
}
// console.log(options)
    return sortDicByKey(options) //返回一个 Map 对象
}
function newTimu(id,json, settings){
    settings = json.settings===undefined||json.isA3 ? settings:json.settings//检测json是否带有settings或者是否为A3子题目
 
    parent = settings.parent === undefined ? '' : settings.parent
    showHr = settings.showHr == undefined ? true : settings.showHr
    showSubmitBtn = settings.showSubmitBtn === undefined ? true : settings.showSubmitBtn
    showEditBtn = settings.showEditBtn === undefined ? true : settings.showEditBtn
    showBtnGroup = settings.showBtnGroup === undefined? true:settings.showBtnGroup
 
    var o = new Object()
    o.type = json.type
    o.pos = json.pos
    o.inputBox = json.inputBox
    o.source = json.source
    o.sourceRange = json.sourceRange
    o.info = json.info
    o.title = json.title
    o.options = json.choices
    // console.log(o.options)
    //将choice 统一为Array的转换为obj
    if(typeOfObj(o.options)==='[object Array]'&&o.options.length===1&&o.type!=='A3'){
    o.options = o.options[0]
    }
    o.options = o.options!==undefined? cleanAndMakeSameLenOptions(o.options):''
    // console.log(o.options)
 
    o.answer = json.answer
    o.explain = json.explain


                setTimeout(function (){
    o.temp = {
                    showCorrect.removeClass('no-background')
        main:$('<div name="timu-'+(id+1)+'" id="'+id+'" class="type'+o.type+' timuContainer"><p class="timuID">'+id+'</p></div>'),
                    showChoice.removeClass('no-background')
    }
                    showCorrect.removeClass('correct')
                    showChoice.removeClass('wrong')
                }, 5000);
            }else if(type=="B"){
                console.log(titleCon)
                titleCon.children('div').each(function (index,i){
                    console.log(i)
                    var subTitleID = $(i).attr('id')
                    var ans = $('#ans-'+subTitleID).text().split(':')[1]
                    var choice = $('#'+id+'-'+index).find("option:selected").text();
                    console.log(choice)
                    if(choice==ans){
                        $('#'+id+'-'+index).addClass('correct')
                    }else {
                        $('#'+id+'-'+index).addClass('wrong')
                        $('<p class="answerTip">正确答案:'+ans+'</p>').appendTo($('#'+id+'-'+index))


                    }
    o.parent = parent
                    setTimeout(function (){
    // if(this.type==='A3'){
                        $('#'+id+'-'+index).removeClass('correct')
    //    $(this).children('.subject').children('.editThisButton').fadeIn(1)
                        $('#'+id+'-'+index).removeClass('wrong')
    //    }
                    }, 5000);
    o.temp.main.hover(function () {
                })
        $('editThis-' + id).fadeIn(10)
            } else if(type=="C"){
    },function (){
                console.log(titleCon)
        $('editThis-' + id).fadeOut(70)
                titleCon.children('div').each(function (index,i){
    })
                    console.log(i)
                    var subTitleID = $(i).attr('id')
                    var ans = $('#ans-'+subTitleID).text().split(':')[1]
                    var choice = $('#'+id+'-'+index).find("option:selected").text();
                    console.log(choice)
                    if(choice==ans){
                        $('#'+id+'-'+index).addClass('correct')
                    }else {
                        $('#'+id+'-'+index).addClass('wrong')
                        $('<p class="answerTip">正确答案:'+ans+'</p>').appendTo($('#'+id+'-'+index))


                    }
    o.A = function () {
                    setTimeout(function (){
        //subjectForm
                        $('#'+id+'-'+index).removeClass('correct')
        this.type = json.isA3?'A3':'A'
                        $('#'+id+'-'+index).removeClass('wrong')
        var optionsGroupObj = optionsGroup(this.type, id, this.options)
                    }, 5000);
        if(json.isA3){
                })
            var titleInlineObj = titleInline(id, 'A3',this.source,undefined,this.title,'titleInline')
            }else if(type=="X"){
        }else{
                var correctAnsText = correctAns.text()
            var titleInlineObj = titleInline(id, this.type,this.source,undefined,this.title,'titleInline')
                var choice = ""
                $('input[name="singelChoice-'+id+'"]:checked').each(function (){
                    choice += $(this).val()
                })
                console.log(choice)
                console.log(correctAnsText)
                var btn = $('#showSingle-'+id).addClass('noDisplay')
                ansCon.fadeIn(100)
                for(var i=0;i<choice.length;i++){
                    var showCorrect = answers.children('#'+correctAnsText[i])
                    var showChoice = answers.children('#'+choice[i])
                    if(correctAnsText.indexOf(choice[i])!=-1){
                        showChoice.addClass('correct')
                    }else{
                        showChoice.addClass('wrong')
                    }
                }
                for(var i=0;i<correctAnsText.length;i++){
                    var showCorrect = answers.children('#'+correctAnsText[i])
                    $('<p class="answerTip">✓</p>').appendTo(showCorrect)
                }
                answers.children('label').each(function (){
                    var a = $(this)
                    setTimeout(function (){
                        removeBackground(a)
                    }, 4000);
                    setTimeout(function (){
                        a.removeClass('no-background')
                        a.removeClass('correct')
                        a.removeClass('wrong')
                    }, 5000);
                })
            }else if(type=="TK"){
                $('#showSingle-'+id).addClass('noDisplay')
                ansCon.fadeIn(100)
                var correctAnsText = correctAns.text()
                var answers = correctAns.text().split(',')
                console.log(answers[0])
                var form =$('#form-'+id).serializeArray()
                var myAns = []
                console.log(form[0]['value'])
                for(var i=0;i<form.length;i++){
                    var input = $('#form-'+id).children('#'+id+'-'+i)
                    if(answers[i] != form[i]['value']){
                        $('<p class="wrong TKcheck">'+answers[i]+'</p>').insertAfter(input)
                    }else{
                        $('<p class="correct TKcheck">'+answers[i]+'</p>').insertAfter(input)
                    }
                }
            }
         }
         }
         function reset(length,type){
          
            if(type=="A"){
        var buttonGroupObj = showBtnGroup? buttonGroup(showSubmitBtn, showEditBtn, id, this.type, this.answer, this.temp.main):''
                for(var id=0;id<length;id++){
        var subjectForm = subjectFrom(id,this.type, [titleInlineObj, optionsGroupObj])
                    var choice = $('input:radio').removeAttr('checked')
        //resultGroupObj
                    var subjectCon = $('#subjectContainer-'+type).children('#'+id)
        var answerInlineObj = answerInline(this.answer)
                    var ansCon = subjectCon.children('.ansContainer')
        var explainInlineObj = this.explain === undefined || this.explain === '' ? '暂无解析' : explainInline(this.explain)
                    $('#showSingle-'+id).removeClass('noDisplay')
        var resultGroupObj = resultGroup(id, [answerInlineObj, explainInlineObj])
                    ansCon.fadeOut(100)
 
                }
        this.temp.main.append(subjectForm,resultGroupObj,buttonGroupObj )
            }else if(type=="B"){
 
                $('.answerTip').css('display','none')
        if(showHr){this.temp.main.append('<hr>')}
                var typeBselected=$('#subjectContainer-B').children('.typeB').children('.subject').children('.titleContainer').children('div').children('select')
        return this.temp.main
                typeBselected.each(function () {
    }
                    $(this).children("option").eq(0).prop("selected",true)
    o.A2 = function () {
                })
        //subjectForm
            }else if(type=="C"){
        var optionsGroupObj = optionsGroup(this.type, id, this.options)
                $('.answerTip').css('display','none')
        var titleInlineObj = titleInline(id, this.type,this.source,undefined,this.title,'titleInline')
                var typeBselected=$('#subjectContainer-C').children('.typeC').children('.subject').children('.titleContainer').children('div').children('select')
        var buttonGroupObj = buttonGroup(showSubmitBtn, showEditBtn, id, this.type, this.answer, this.temp.main)
                typeBselected.each(function () {
        var subjectForm = subjectFrom(id,this.type, [titleInlineObj, optionsGroupObj])
                    $(this).children("option").eq(0).prop("selected",true)
        //resultGroupObj
                })
        var answerInlineObj = answerInline(this.answer)
            }else if(type=="X") {
        var explainInlineObj = this.explain === undefined || this.explain === '' ? '暂无解析' : explainInline(this.explain)
                $('.answerTip').css('display', 'none')
        var resultGroupObj = resultGroup(id, [answerInlineObj, explainInlineObj])
                for (var id = 0; id < length; id++) {
 
                    var choice = $('input:checkbox').each(function () {
        this.temp.main.append(subjectForm,resultGroupObj,buttonGroupObj )
                        $(this).prop('checked', false)
 
                    })
        if(showHr){this.temp.main.append('<hr>')}
                    var subjectCon = $('#subjectContainer-' + type).children('#' + id)
        return this.temp.main
                    var ansCon = subjectCon.children('.ansContainer')
    }
                    $('#showSingle-' + id).removeClass('noDisplay')
    o.A3 = function () {
                    ansCon.fadeOut(100)
        // console.log(settings)
                }
        var realSource = getRealSource(json.source)
            }else if(type=="TK") {
        var sourcePrefix = realSource.prefix===''?'':realSource.prefix
                $('.TKcheck').each(function (a) {
        //subjectForm
                    $(this).remove()
        var range = rangeInline(this.source, this.sourceRange)
                })
        var info = infoInline(this.info)
                for(var id=0;id<length;id++){
 
                    var choice = $('input:radio').removeAttr('checked')
        var subTitlesList = []
                    var subjectCon = $('#subjectContainer-'+type).children('#'+id)
        for(var i=0;i<this.title.length;i++){
                    var ansCon = subjectCon.children('.ansContainer')
            if(this.explain[i]==undefined){
                    $('#showSingle-'+id).removeClass('noDisplay')
                this.explain[i] = '暂无解析'
                    ansCon.fadeOut(100)
                }
             }
             }
 
             var data = {
        }
                'isA3':true,
        //A1型题
                "type":"A",
        function typeA(json,id,parent){
                "source":sourcePrefix+realSource.source+'-'+(i+1),
            parent =parent !==undefined ?parent : '#subjectContainer-A'
                "title":this.title[i],
             var subjectCon = $(parent).children('#'+id)
                "answer":this.answer[i],
            var titleCon = subjectCon.children('.subject').children('.titleContainer')
                "explain":this.explain[i],
            var ansCon = subjectCon.children('.ansContainer')
                "choices":this.options.get(i+''),
            var source = titleCon.children('.source').text(json.source)
            var title = titleCon.children('.title').text(json.title)
            var correctAns = ansCon.children('.correctAnswer').text(json.answer)
            var exp = ansCon.children('.explain').text(json.explain)
            var answers = subjectCon.children('.subject').children('.answers')
            var char = ['A: ','B: ','C: ','D: ','E: ',]
            var i = 0
            for(var key in json.choices){
                if(json.choices[key].length>0){
                    var label = '<label id="'+key+'"><input name="singelChoice-'+id+'" type="radio" value="'+key+'" />'+char[i]+json.choices[key]+'</label>'
                    answers.append(label)
                }
                i+=1
             }
             }
            // console.log(data)
            // console.log(this.options)
            subTitlesList.push(newTimu(id+'-'+i,data,{
                showHr:false,
                showEditBtn:false,
                showSubmitBtn:false,
                showBtnGroup:false
            }).A())
         }
         }
         function typeAModule(id,parent){
          
            parent =parent !==undefined ?parent : '#subjectContainer-A'
        // console.log(this.answer)
            var main = $('<div id="'+id+'" class="typeA"></div>')
        var buttonGroupObj  = buttonGroup(true, false, id, this.type, this.answer, this.temp.main)
            var subject = $('<div class="subject">' +
        // console.log(buttonGroupObj)
                '<div class="titleContainer"><p class="source"></p><p class="title"></p></div>' +
        var subjectFormObj = subjectDIV(id,this.type, [subTitlesList])
                '<div class="answers"></div></div>').appendTo(main)
        this.temp.main.append(range,info, subjectFormObj, buttonGroupObj)
            var showButton = $('<button class="button-small button-pill button button-caution" id="showSingle-'+id+'" class="showSingleBtn">提交</button>').appendTo(main)
 
            var ansCon = $('<div id="ansContainer" class="ansContainer noDisplay">' +
        this.temp.main.append('<hr>')
                '            <p style="display:inline;"><b>正确答案:</b></p>\n' +
        return this.temp.main
                '            <p class="correctAnswer"></p><br><p><b>解析: </b></p>\n' +
    }
                '           <p class="explain"></p></div><hr>').appendTo(main)
    o.B = function () {
            main.appendTo($(parent))
        var realSource = getRealSource(json.source)
             $("#showSingle-"+id).bind("click",function (){
        var sourcePrefix = realSource.prefix===''?'':realSource.prefix
                showChoiceAnswer(id,'A')
        //subjectForm
             })
        var range = rangeInline(this.source, this.sourceRange)
        var optionsGroupObj = optionsGroup(this.type, id, this.options)
        var titleInlineList = []
        for(var i=0;i<this.title.length;i++){
            var dropdown = dropDownInputWidget(id+'-'+i, mapKeysList(this.options))
             var titleInlineObj = titleInline(id+'-'+i, this.type, json.source, i, this.title[i],'titleInline')
            titleInlineObj.append(dropdown)
             titleInlineList.push(titleInlineObj)
         }
         }
         function typeA2Module(){
         var titlesGroupObj = titlesGroup(titleInlineList)
            var main = $('<div id="'+id+'" class="typeA2"></div>')
        var buttonGroupObj = buttonGroup(showSubmitBtn, showEditBtn, id, this.type, this.answer, this.temp.main)
            var subject = $('<div class="subject">' +
 
                '<div class="titleContainer"><p class="source"></p><p class="title"></p></div>' +
        var subjectForm = subjectFrom(id,this.type, [optionsGroupObj, titlesGroupObj])
                '<div class="answers"></div></div>').appendTo(main)
 
             var showButton = $('<button class="button-small button-pill button button-caution" id="showSingle-'+id+'" class="showSingleBtn">提交</button>').appendTo(main)
        //resultGroupObj
             var ansCon = $('<div id="ansContainer" class="ansContainer noDisplay">' +
        var resultGroupList = []
                '           <p style="display:inline;"><b>正确答案:</b></p>\n' +
        for(var i=0;i<this.answer.length;i++){
                '           <p class="correctAnswer"></p><br><p><b>解析: </b></p>\n' +
            var answerInlineObj = answerInline(this.answer[i])
                '           <p class="explain"></p></div><hr>').appendTo(main)
             var explainInlineObj = this.explain[i] === undefined || this.explain[i] === '' ? '暂无解析' : explainInline(this.explain[i])
            main.appendTo($('#subjectContainer-A2'))
             resultGroupList.push(
            $("#showSingle-"+id).bind("click",function (){
                    '<b>'+sourcePrefix+realSource.source+'-'+i+'</b>',
                 showChoiceAnswer(id,'A')
                    $('<div style="margin-left:10px"></div>').append(answerInlineObj),
            })
                    $('<div style="margin-left:10px"></div>').append(explainInlineObj)
                 )
         }
         }
         function typeA2(){
         var resultGroupObj = resultGroup(id, resultGroupList)
            var subjectCon = $('#subjectContainer-A2').children('#'+id)
 
            var titleCon = subjectCon.children('.subject').children('.titleContainer')
        this.temp.main.append(range ,subjectForm,resultGroupObj, buttonGroupObj)
            var ansCon = subjectCon.children('.ansContainer')
 
            var source = titleCon.children('.source').text(json.source)
        if(showHr){this.temp.main.append('<hr>')}
            var title = titleCon.children('.title').text(json.title)
        return this.temp.main
            var correctAns = ansCon.children('.correctAnswer').text(json.answer)
    }
            var exp = ansCon.children('.explain').text(json.explain)
    o.C = function () {
            var answers = subjectCon.children('.subject').children('.answers')
        var realSource = getRealSource(json.source)
            var char = ['A: ','B: ','C: ','D: ','E: ',]
        var sourcePrefix = realSource.prefix===''?'':realSource.prefix
            var i = 0
        //subjectForm
            for(var key in json.choices){
        var range = rangeInline(this.source, this.sourceRange)
                if(json.choices[key].length>0){
        var optionsGroupObj = optionsGroup(this.type, id, this.options)
                    var label = '<label id="'+key+'"><input name="singelChoice-'+id+'" type="radio" value="'+key+'" />'+char[i]+json.choices[key]+'</label>'
        var titleInlineList = []
                    answers.append(label)
        for(var i=0;i<this.title.length;i++){
                }
            var dropdown = dropDownInputWidget(id+'-'+i, mapKeysList(this.options))
                i+=1
            var titleInlineObj = titleInline(id+'-'+i, this.type, json.source, i, this.title[i],'titleInline')
             }
            titleInlineObj.append(dropdown)
             titleInlineList.push(titleInlineObj)
         }
         }
         function typeA3(json,id){
         var titlesGroupObj = titlesGroup(titleInlineList)
            var subjectCon = $('#subjectContainer-A3').children('#'+id)
        var buttonGroupObj = buttonGroup(showSubmitBtn, showEditBtn, id, this.type, this.answer, this.temp.main)
            var subject = subjectCon.children('.subject')
 
            var titleCon = subjectCon.children('.subject').children('.titleContainer')
        var subjectForm = subjectFrom(id,this.type, [titlesGroupObj, optionsGroupObj])
            var ansCon = subjectCon.children('.ansContainer')
 
            var source = json.source
        //resultGroupObj
            var range = json.sourceRange
        var resultGroupList = []
            var choices = json.choices
        for(var i=0;i<this.answer.length;i++){
            var answer = json.answer
             var answerInlineObj = answerInline(this.answer[i])
            var end = source *1 + range*1 -1
             var explainInlineObj = this.explain[i] === undefined || this.explain[i] === '' ? '暂无解析' : explainInline(this.explain[i])
             var title = json.title
             resultGroupList.push(
            var correctAns = json.answer
                    '<b>'+sourcePrefix+realSource.source+'-'+i+'</b>',
             var exp = ansCon.children('.explain').text(json.explain)
                    $('<div style="margin-left:10px"></div>').append(answerInlineObj),
            var info = subject.children('.info').text(json.info)
                     $('<div style="margin-left:10px"></div>').append(explainInlineObj)
            var answers = subjectCon.children('.subject').children('.answers')
                 )
            var char = ['A','B','C','D','E',]
             var sourceRange = subject.children('.sourceRange').text('第 '+source+' '+end+' ')
            for(var i=0;i<title.length;i++){
                typeAModule(id+'-'+i,titleCon)
                var data = {
                    "type":"A",
                    "source":source+'-'+(i+1),
                     "title":title[i],
                    "answer":answer[i],
                    "explain":exp[i],
                    "choices":{},
                }
                for(var j=0;j<choices.length;j++){
                    data.choices[char[j]]=choices[i][j]
                }
                console.log(data)
                 typeA(data,id+'-'+i,titleCon)
            }
         }
         }
         function typeA3Module(id){
         var resultGroupObj = resultGroup(id, resultGroupList)
            var main = $('<div id="'+id+'" class="typeA3"></div>')
 
            var subject = $('<div class="subject">' +
        this.temp.main.append(range ,subjectForm,resultGroupObj, buttonGroupObj)
                '<div class="sourceRange"></div>'+
 
                '<div class="info"></div>'+
        if(showHr){this.temp.main.append('<hr>')}
                '<div class="titleContainer"></div></div>'
        return this.temp.main
             ).appendTo(main)
    }
             main.appendTo($('#subjectContainer-A3'))
    o.X = function () {
        //subjectForm
        var optionsGroupObj = optionsGroup(this.type, id, this.options)
        var titleInlineObj = titleInline(id, this.type,this.source,undefined,this.title,'titleInline')
        var buttonGroupObj = showBtnGroup? buttonGroup(showSubmitBtn, showEditBtn, id, this.type, this.answer, this.temp.main):''
        var subjectForm = subjectFrom(id,this.type, [titleInlineObj, optionsGroupObj])
        //resultGroupObj
        var answerInlineObj = answerInline(this.answer)
        var explainInlineObj = this.explain === undefined || this.explain === '' ? '暂无解析' : explainInline(this.explain)
        var resultGroupObj = resultGroup(id, [answerInlineObj, explainInlineObj])
 
        this.temp.main.append(subjectForm,resultGroupObj,buttonGroupObj )
 
        if(showHr){this.temp.main.append('<hr>')}
        return this.temp.main
    }
    o.PD = function () {
    var dic = {
      right: ['对', '正确', 't', '✓', '√', '1', 'true'],
      wrong: ['错', '错误', '×', 'x', 'f', 'false', 'wrong', '0']
    }
        var ans = ''
        var ansOption = ''
        if(isInArray(dic.right, json.answer.toLowerCase())){
            ans = '正确'
             ansOption = 'A'
        }else if(isInArray(dic.wrong, json.answer.toLowerCase())){
             ans = '错误'
            ansOption = 'B'
        }else {
        ans = '系统错误:该判断题答案不符合标准格式'
         }
         }
         //B型题
 
         function typeB(json,id){
         //subjectForm
            var subjectCon = $('#subjectContainer-B').children('#'+id)
         var option = new Map()
            var subject = subjectCon.children('.subject')
        option.set('A', '正确')
            var titleCon = subjectCon.children('.subject').children('.titleContainer')
        option.set('B', '错误')
            var ansCon = subjectCon.children('.ansContainer')
        var optionsGroupObj = optionsGroup(this.type, id, option)
            var source = json.source
        var titleInlineObj = titleInline(id, this.type,this.source,undefined,this.title,'titleInline')
            var range = json.sourceRange
        var buttonGroupObj = showBtnGroup? buttonGroup(showSubmitBtn, showEditBtn, id, 'A', ansOption, this.temp.main):''
            var end = source *1 + range*1 -1
        var subjectForm = subjectFrom(id,this.type, [titleInlineObj,optionsGroupObj])
            var title = json.title
        //resultGroupObj
            var correctAns = json.answer
        var answerInlineObj = answerInline(ans)
            var exp = ansCon.children('.explain').text(json.explain)
        var explainInlineObj = this.explain === undefined || this.explain === '' ? '暂无解析' : explainInline(this.explain)
            var answers = subjectCon.children('.subject').children('.answers')
        var resultGroupObj = resultGroup(id, [answerInlineObj, explainInlineObj])
            var char = ['A: ','B: ','C: ','D: ','E: ',]
 
            var sourceRange = subject.children('.sourceRange').text('第 '+source+' 到 '+end+' 题')
        this.temp.main.append(subjectForm,resultGroupObj,buttonGroupObj )
             for(var n=0;n<title.length;n++){
 
                var text = title[n].replace("()",function(a){
        if(showHr){this.temp.main.append('<hr>')}
                    return "(<select class=\"button-small button-rounded button\"> " +
        return this.temp.main
                        "<option value ='A'>A</option>" +
    }
                        "<option value ='B'>B</option>" +
    o.TK = function () {
                        "<option value ='C'>C</option>" +
        var tkTitle = fillBlank(id, this.title, this.pos, ['text-input-tk'])
                        "<option value ='D'>D</option>" +
        var titleInlineObj = titleInline(id, this.type,this.source,undefined,tkTitle, 'titleInline-no-flex')
                        "<option value ='E'>E</option>" +
        titleInlineObj.children('.text-input-tk').each(function(i,v){
                        "</select>)"
             // console.log(i,v)
                })
            $(this).children('input').css(
                var div = '<div id="'+id+'-'+n+'"><p class="source">'+'T'+(source*1+n)+'</p>'+text+'</div>'
                'display','inline'
                titleCon.append(div)
            )
            }
            $(this).children('input').css(
            var i = 0
                'width','200px'
            for(var key in json.choices){
            )
                if(json.choices[key].length>0){
        })
                    var label = '<li id="'+key+'">'+char[i]+json.choices[key]+'</li>'
        var buttonGroupObj = showBtnGroup? buttonGroup(showSubmitBtn, showEditBtn, id, this.type, this.answer, this.temp.main):''
                    answers.append(label)
        var subjectForm = subjectFrom(id,this.type, [titleInlineObj])
                    console.log(label)
 
                }
        this.temp.main.append(subjectForm, buttonGroupObj)
                i+=1
 
            }
        if(showHr){this.temp.main.append('<hr>')}
            text = ''
        return this.temp.main
            for(var n=0;n<correctAns.length;n++){
    }
                text += '<p id="ans-'+id +'-'+n+'">'+(id*1+n)+''+correctAns[n]+'</p>'
    o.MJ = function () {
                ansCon.children('.correctAnswer').html(text)
        var mjTitle = ''
            }
        if(this.inputBox===0){
            mjTitle = json.title + '<span class="blur" tabindex="0" style="display:inline;outline=0;" onclick="">' + json.answer +'</span>'
        }else{
            mjTitle = fillBlank(id, this.title+':()', '()', ['text-input-mj'])
         }
         }
         function typeBModule(id){
         var titleInlineObj = titleInline(id, this.type,this.source,undefined,mjTitle, 'titleInline-no-flex')
             var main = $('<div id="'+id+'" class="typeB"></div>')
        titleInlineObj.children('.text-input-mj').each(function(i,v){
             var subject = $('<div class="subject">' +
             // console.log(i,v)
                 '<div class="sourceRange"></div>'+
            $(this).children('input').css(
                '<div class="answers"></div>'+
                'display','inline'
                '<div class="titleContainer"></div></div>'
            )
                ).appendTo(main)
             $(this).children('input').css(
            var showButton = $('<button class="button-small button-pill button button-caution" id="showSingle-'+id+'" class="showSingleBtn">提交</button>').appendTo(main)
                 'width','auto'
            var ansCon = $('<div id="ansContainer" class="ansContainer noDisplay">' +
            )
                '           <p style="display:inline;"><b>正确答案:</b></p>\n' +
        })
                '            <p class="correctAnswer"></p><br><p><b>解析: </b></p>\n' +
        var buttonGroupObj = this.inputBox!==0 ? buttonGroup(showSubmitBtn, showEditBtn, id, 'TK', [this.answer], this.temp.main):''
                '            <p class="explain"></p></div><hr>').appendTo(main)
        var subjectForm = subjectFrom(id,this.type, [titleInlineObj])
            main.appendTo($('#subjectContainer-B'))
 
            $("#showSingle-"+id).bind("click",function (){
        this.temp.main.append(subjectForm, buttonGroupObj)
                showChoiceAnswer(id,'B')
        if(showHr){this.temp.main.append('<hr>')}
             })
        return this.temp.main
    }
    return o
}
 
// // 获取select的选项
function getSelectedAnswer(id){
    var data = formToJSON('#'+prefixDic.formId + id,true)
    console.log(data)
    return data
}
// // 获取checkbox值
function  getCheckBoxValue(name) {
    var ids = $('input:checkbox[name="'+name+'"]:checked');
    var data = [];
    for (var i = 0; i < ids.length; i ++) {
        data.push(ids[i].value)
    }
    return data
}
function showThisAnswer(id,type,correctAnswer){
var isRight = false
    var resultGroup = $('#resultGroup-'+id)
    resultGroup.fadeIn(100)
    $('#showThisAnswer-'+id).fadeOut(1)
 
    if(type==="A" || type ==='A2'){
        var optionGroupName = prefixDic.radioName+id
        var optionInlinePrefixID = prefixDic.radioName+id
        var usersChoice = getSelectedAnswer(id)[optionGroupName]
console.log(usersChoice)
        var correctDivObj = $('#'+optionInlinePrefixID + '-' + correctAnswer)
        var usersChoiceDivObj = $('#'+optionInlinePrefixID + '-' + usersChoice)
       
        if(usersChoice===correctAnswer){
            correctDivObj.addClass('correct')
            isRight = true
        }else{
            correctDivObj.addClass('correct')
             usersChoiceDivObj.addClass('wrong')
         }
         }
        //C型题
 
        function typeCModule(id){
    }else if(type==='A3'){
            var main = $('<div id="'+id+'" class="typeC"></div>')
        for(var i=0;i<correctAnswer.length;i++){
            var subject = $('<div class="subject">' +
             //以下与A型题时一样的代码,知识用subID替换ID变量
                '<div class="sourceRange"></div>'+
             showThisAnswer(id+'-'+i,'A',correctAnswer[i])
                '<div class="titleContainer"></div>'+
                '<div class="answers"></div></div>'
            ).appendTo(main)
             var showButton = $('<button class="button-small button-pill button button-caution" id="showSingle-'+id+'" class="showSingleBtn">提交</button>').appendTo(main)
             var ansCon = $('<div id="ansContainer" class="ansContainer noDisplay">' +
                '            <p style="display:inline;"><b>正确答案:</b></p>\n' +
                '           <p class="correctAnswer"></p><br><p><b>解析: </b></p>\n' +
                '            <p class="explain"></p></div><hr>').appendTo(main)
            main.appendTo($('#subjectContainer-C'))
            $("#showSingle-"+id).bind("click",function (){
                showChoiceAnswer(id,'C')
            })
         }
         }
        function typeC(json,id){
    } else if(type==='B'){
            var subjectCon = $('#subjectContainer-C').children('#'+id)
        var dropDownInputPrefix = 'select-'+id +'-'
            var subject = subjectCon.children('.subject')
        var usersChoice = getSelectedAnswer(id)
            var titleCon = subjectCon.children('.subject').children('.titleContainer')
        // console.log(usersChoice)
             var ansCon = subjectCon.children('.ansContainer')
 
             var source = json.source
        for(var i in usersChoice){
            var range = json.sourceRange
             var dorpdownID = i.replace(dropDownInputPrefix,'')//获取子ID
            var end = source *1 + range*1 -1
             var subTimuID = id+'-'+dorpdownID
             var title = json.title
             var thisTimuUsersChoice = usersChoice[i]
             var correctAns = json.answer
             var thisTimuCorrectAnswer = correctAnswer[dorpdownID]
             var exp = ansCon.children('.explain').text(json.explain)
             var subTimuDiv = $('#title-'+subTimuID)
             var answers = subjectCon.children('.subject').children('.answers')
 
            var char = ['A: ','B: ','C: ','D: ','E: ',]
             if(thisTimuUsersChoice===thisTimuCorrectAnswer){
            var sourceRange = subject.children('.sourceRange').text('第 '+source+' 到 '+end+' 题')
                subTimuDiv.addClass('correct')
             for(var n=0;n<title.length;n++){
             }else{
                 var text = title[n].replace("()",function(a){
                 subTimuDiv.addClass('wrong')
                    return "(<select class=\"button-small button-rounded button\"> " +
                 subTimuDiv.append('<label class="answerTip">正确答案:'+thisTimuCorrectAnswer+'</label>')
                        "<option value ='A'>A</option>" +
                        "<option value ='B'>B</option>" +
                        "<option value ='C'>C</option>" +
                        "<option value ='D'>D</option>" +
                        "<option value ='E'>E</option>" +
                        "</select>)"
                 })
                var div = '<div id="'+id+'-'+n+'"><p class="source">'+'T'+(source*1+n)+'</p>'+text+'</div>'
                titleCon.append(div)
             }
             }
            var i = 0
        }
            for(var key in json.choices){
    } else if(type=="C"){
                if(json.choices[key].length>0){
        var dropDownInputPrefix = 'select-'+id +'-'
                    var label = '<li id="'+key+'">'+char[i]+json.choices[key]+'</li>'
        var usersChoice = getSelectedAnswer(id)
        // console.log(usersChoice)
 
        for(var i in usersChoice){
            var dorpdownID = i.replace(dropDownInputPrefix,'')//获取子ID
            var subTimuID = id+'-'+dorpdownID
            var thisTimuUsersChoice = usersChoice[i]
            var thisTimuCorrectAnswer = correctAnswer[dorpdownID]
            var subTimuDiv = $('#title-'+subTimuID)


                    answers.append(label)
            if(thisTimuUsersChoice===thisTimuCorrectAnswer){
                    console.log(label)
                subTimuDiv.addClass('correct')
                }
            }else{
                 i+=1
                 subTimuDiv.addClass('wrong')
            }
                 subTimuDiv.append('<label class="answerTip">正确答案:'+thisTimuCorrectAnswer+'</label>')
            text = ''
            for(var n=0;n<correctAns.length;n++){
                 text += '<p id="ans-'+id +'-'+n+'">'+(id*1+n)+':'+correctAns[n]+'</p>'
                ansCon.children('.correctAnswer').html(text)
             }
             }
         }
         }
        //X型题
    }else if(type=="X"){
        function typeX(json,id){
        var optionGroupName = 'checkbox-'+id
            var subjectCon = $('#subjectContainer-X').children('#'+id)
        var optionInlinePrefixID = 'checkbox-'+id
            var titleCon = subjectCon.children('.subject').children('.titleContainer')
        var usersChoice = getCheckBoxValue(optionGroupName).sort()
            var ansCon = subjectCon.children('.ansContainer')
        correctAnswer = correctAnswer.match(/[A-Z]/g).sort()
            var source = titleCon.children('.source').text(json.source)
        var lenCorrect = correctAnswer.length
            var title = titleCon.children('.title').text(json.title)
        var lenUser = usersChoice.length
            var correctAns = ansCon.children('.correctAnswer').text(json.answer)
        // console.log(correctAnswer)
            var exp = ansCon.children('.explain').text(json.explain)
        for(var i=0;i<lenUser;i++){
             var answers = subjectCon.children('.subject').children('.answers')
             // console.log(isInArray(correctAnswer, usersChoice[i]),usersChoice[i] ,correctAnswer)
            var char = ['A: ','B: ','C: ','D: ','E: ',]
             if(!isInArray(correctAnswer, usersChoice[i])){
             var i = 0
                $('#'+optionInlinePrefixID + '-' + usersChoice[i]).addClass('wrong')
            for(var key in json.choices){
                if(json.choices[key].length>0){
                    var label = '<label id="'+key+'"><input name="singelChoice-'+id+'" type="checkbox" value="'+key+'" />'+char[i]+json.choices[key]+'</label>'
                    answers.append(label)
                }
                i+=1
             }
             }
         }
         }
         function typeXModule(id){
 
            var main = $('<div id="'+id+'" class="typeX"></div>')
         for(var i=0;i<lenCorrect;i++){
             var subject = $('<div class="subject">' +
             if(!isInArray(usersChoice,correctAnswer[i])){
                '<div class="titleContainer"><p class="source"></p><p class="title"></p></div>' +
                $('#'+optionInlinePrefixID + '-' + correctAnswer[i]).addClass('notChoiced')
                '<div class="answers"></div></div>').appendTo(main)
             }else {
            var showButton = $('<button class="button-small button-pill button button-caution" id="showSingle-'+id+'" class="showSingleBtn">提交</button>').appendTo(main)
                $('#'+optionInlinePrefixID + '-' + correctAnswer[i]).addClass('correct')
            var ansCon = $('<div id="ansContainer" class="ansContainer noDisplay">' +
                '            <p style="display:inline;"><b>正确答案:</b></p>\n' +
                '           <p class="correctAnswer"></p><br><p><b>解析: </b></p>\n' +
                '            <p class="explain"></p></div><hr>').appendTo(main)
            main.appendTo($('#subjectContainer-X'))
            $("#showSingle-"+id).bind("click",function (){
                showChoiceAnswer(id,'X')
             })
        }
        //判断题
        function typePD(json,id){
            var subjectCon = $('#subjectContainer-PD').children('#'+id)
            var titleCon = subjectCon.children('.subject').children('.titleContainer')
            var ansCon = subjectCon.children('.ansContainer')
            titleCon.children('.source').text(json.source)
            titleCon.children('.title').text(json.title)
            ansCon.children('.explain').text(json.explain)
            if(json.answer=='T' || json.answer=='正确' || json.answer=='1' || json.answer=='√'){
                ansCon.children('.correctAnswer').text('正确')
            }else if(json.answer=='F' || json.answer=='错误' || json.answer=='0' || json.answer=='×'){
                ansCon.children('.correctAnswer').text('错误')
             }
             }
         }
         }
         function typePDModule(id){
 
            var main = $('<div id="'+id+'" class="typePD"></div>')
          
            var subject = $('<div class="subject">' +
    }else if(type=="TK"){
                '<div class="titleContainer"><p class="source"></p><p class="title"></p></div>' +
        var textInputPrefix = prefixDic.textInputId+id+'-'
                '<div class="answers">' +
        var usersChoice = getSelectedAnswer(id)
                '<label id="正确" style="display: inline;"><input name="singelChoice-'+id+'" type="radio" value="正确" />正确</label>' +
        for(var i in usersChoice){
                '<label id="错误" style="display: inline;"><input name="singelChoice-'+id+'" type="radio" value="错误" />错误</label>' +
             var inputID = i.replace(textInputPrefix,'')
                '</div></div>').appendTo(main)
             // console.log('#'+i)
            var showButton = $('<button class="button-small button-pill button button-caution" id="showSingle-'+id+'" class="showSingleBtn">提交</button>').appendTo(main)
             var corrcetAnswerText = correctAnswer[inputID]===undefined?'暂无答案':correctAnswer[inputID]
             var ansCon = $('<div id="ansContainer" class="ansContainer noDisplay">' +
             if(usersChoice[i]===correctAnswer[inputID]){
                '            <p style="display:inline;"><b>正确答案:</b></p>\n' +
                $('#'+i).html('<label class="answerTip correct">'+corrcetAnswerText+'</label>')
                '            <p class="correctAnswer"></p><br><p><b>解析: </b></p>\n' +
             }else{
                '            <p class="explain"></p></div><hr>').appendTo(main)
                 $('#'+i).after('<label class="answerTip wrong">'+corrcetAnswerText+'</label>')
            main.appendTo($('#subjectContainer-PD'))
            $("#showSingle-"+id).bind("click",function (){
                showChoiceAnswer(id,'A')
             })
        }
        //TK型题
    function typeTK(json,id){
            var subjectCon = $('#subjectContainer-TK').children('#'+id)
             var titleCon = subjectCon.children('.subject').children('.titleContainer')
            var ansCon = subjectCon.children('.ansContainer')
            var source = titleCon.children('.source').text(json.source)
             console.log(source)
            var correctAns = ansCon.children('.correctAnswer').text(json.answer)
            var exp = ansCon.children('.explain').text(json.explain)
            var pos = json.pos
            var title = json.title
            var reg = new RegExp(pos,'g')
             var subID = 0
            var posCount = title.match(reg).length
            for(var i=0;i<posCount;i++){
                 title = title.replace(pos,'<input name="'+id+'-'+i+'" id="'+id+'-'+i+'" type="text" form="form-'+id+'"/>')
                console.log(title)
             }
             }
            titleCon.children('.title').html(title)
        }
        function typeTKModule(id){
            var main = $('<div id="'+id+'" class="typeTK"></div>')
            var subject = $('<div class="subject"><div class="titleContainer"><p class="source"></p><form id="form-'+id+'" class="title"></form></div></div>').appendTo(main)
            var showButton = $('<button class="button-small button-pill button button-caution" id="showSingle-'+id+'" class="showSingleBtn">提交</button>').appendTo(main)
            var ansCon = $('<div id="ansContainer" class="ansContainer noDisplay">' +
                '            <p style="display:inline;"><b>正确答案:</b></p>\n' +
                '            <p class="correctAnswer"></p><br><p><b>解析: </b></p>\n' +
                '            <p class="explain"></p></div><hr>').appendTo(main)
            main.appendTo($('#subjectContainer-TK'))
            $("#showSingle-"+id).bind("click",function (){
                showChoiceAnswer(id,'TK')
            })
         }
         }
setTimeout(function (){
    }
getdata();
    if(isRight){
},0);
    locateTo(id+1)
    }
}
function removeBackground(obj){
    obj.addClass('no-background')
}

2023年6月29日 (四) 15:04的最新版本

//设置
var prefixDic = {
    formId:'timuForm-',
    radioName:'radio-',
    radioId:'radio-input-',
    checkBoxName:'checkbox-',
    checkBoxId:'checkbox-input-',
    selectId:'select-',
    selectName:'select-',
    textInputName:'text-',
    textInputId:'text-'
}


//主函数
function renderTimuFromSessionStorage(){
	var timuList = gDomTimuList()
	// console.log(timuList)
	var order = timuList.order
	var timu = timuList.timu
	var errors = timuList.errors
	var repeatSource = timuList.repeatSource
	for(var i=0;i<order.length;i++){
		if(order[i].isError){
			var errorWidget = new OO.ui.MessageWidget( {
				type: 'error',
				showClose:true,
				label: 'id='+i+'的题目加载错误,错误信息:'+errors[i].info.name+':'+errors[i].info.message+'\n'+'对应文本:'+errors[i].dataText
			} )
			render(i,'A',$('<di></div>').append(errorWidget.$element,'<hr>'))
		}else{
			var dataJSON = timu[i].dataJSON
            var o = newTimu(i,dataJSON,{})[dataJSON.type]()
            render(i,dataJSON.type,o)
            var needCheck = $('#noRepeatCheck').length<=0
            if(repeatSource[i]!==undefined&&needCheck){
            	var warningWidget = new OO.ui.MessageWidget( {
					type: 'warning',
					label: '本题与本页面id为'+repeatSource[i]+'的题目source参数重复,本参数重复可能引起错误,请检查并修改!'
				} )
				render(i,'A',warningWidget.$element)
            }
		}
	}
}


//题目渲染函数
//生成info
function infoInline(info){
    return $('<div class="info">'+info+'</div>')
}
//单行题干的处理titleInline(type, source, title)
//生成titleGroup
function titlesGroup(titlesList){
    var group = $('<div class="titlesGroup"></div>')
    for(var i=0;i<titlesList.length;i++){
        group.append(titlesList[i])
    }
    return group
}
//生成titleInline
function titleInline(id, type,originalSource, sourceSuffix,title, classes){
    classes = classes===undefined?'':classes
    return $('<div id="title-'+id+'" class="'+classes+'"></div>').append(
            titleInlineType(type),
            titleInlineSource(originalSource,sourceSuffix,type),
            titleInlineTitle(title)
        )
}
function titleInlineType(type){
    var typeChinese = {
        A:'A',
        A2:'A2',
        A3:'A3',
        B:'B',
        C:'C',
        X:'X',
        TK:'填空',
        PD:'判断',
        MJ:'名解'
    }
    return $('<p class="type">'+typeChinese[type]+'</p>')
}
//从有中文的source中提取最后一个连续数字作为真实的source
function getRealSource(source){
    // console.log(source)
	var getContinueNumber = source.match(/[0-9]+/g)
	var splitContinueNumber = source.split(/[0-9]+/g)
    var realSource = getContinueNumber[getContinueNumber.length-1]*1
    var prefix = ''
    for(var i=0;i<getContinueNumber.length;i++){
    	prefix += splitContinueNumber[i]
    }
    return {prefix:prefix,source:realSource}
}
//返回source的obj
function titleInlineSource(originalSource, suffix , type){
    var realSource = type==='A3'?{prefix:'', source:originalSource}: getRealSource(originalSource)
    
    var prefix = realSource.prefix
    var source = realSource.source
    var suffix = suffix === undefined ? '':'-'+suffix

    return $('<p class="source">'+prefix+source+suffix+'</p>')
}
//返回sourceRange的obj
function rangeInline(originalSource, sourceRange, type){
    var source = getRealSource(originalSource).source
    var end = source*1+sourceRange*1 -1

    var rangeText = '第 '+source +' 到 ' + end + ' 题'
    var suffix = type==='B'?'共用备选答案':'共用题干'

    return $('<div class="sourceRange">'+rangeText + suffix +'</div>')
}
//返回title 的 obj
function titleInlineTitle(title){
    return $('<p class="title">'+title+'</p>')
}
//生成buttonGroup
function buttonGroup(showSubmitBtn, showEditBtn, id, type, correctAnswer, hoverTarget){
    // console.log(showEditBtn)
    var buttonGroupObj = $('<div class="buttonGroup"></div>')
    if(showSubmitBtn){buttonGroupObj.append(
        new OO.ui.ButtonWidget( {
            id:'showThisAnswer-'+id,
            label: '提交',
            flags: [
                'progressive'
            ]
        } ).$element.bind("click",function (){
            showThisAnswer(id,type,correctAnswer)
        })
    )}
    if(showEditBtn){
        buttonGroupObj.append(
            // $('<a class="editThisBtn" style="" href="javascript:void(0)"><span class="" id="editThis-' + id + '">题目有误?点击编辑本题</span></a>'),
            new OO.ui.ButtonWidget( {
                id:'editThis-' + id,
                classes:['editThisBtn'],
                framed: false,
                flags: [
                    'progressive'
                ],
                icon: 'edit',
                label: '题目有误?点击编辑本题'
            } ).$element.bind("click",function (){
                editThis(id)
            })
        )
        hoverTarget.hover(function () {
            buttonGroupObj.children('.editThisBtn').fadeIn(10)
        },function (){
            buttonGroupObj.children('.editThisBtn').fadeOut(70)
        })
    }
    return buttonGroupObj
}
//resultGroup: answer和explain的显示框
function resultGroup(id, items, answerInline,explainInline){
    var group = $('<div id="resultGroup-'+id+'" class="resultGroup"></div>')
    for(var i=0;i<items.length;i++){
        group.append(items[i])
    }
    return group
}
//生成answerInline
function answerInline(answer){
    return $('<div class="answerInline"><label>正确答案:</label>'+answer+'</div>')
}
//生成explainInline
function explainInline(explain){
    return $('<div class="explainInline"><label>解析:</label>'+explain+'</div>')
}

//生成subject 的form, 顺序items顺序添加 (title, options, buttonGroup)
function subjectFrom(id, type, items){
    var form =  $('<form id="'+prefixDic.formId+id+'" class="subjectForm"></form>')
    //绑定变化事件
    form.change(function(){
    	// 如果开启了暂存,则暂存
        if(!gWebPageTimuSettings().noTemp){
            formChangeListener(id, type)
        }
    })
    for(var i=0;i<items.length;i++){
        form.append(items[i])
    }
    return form
}
function subjectDIV(id,type,items){
    var div=  $('<div id="'+prefixDic.formId+id+'" class="subjectForm"></div>')
    for(var i=0;i<items.length;i++){
        div.append(items[i])
    }
    return div
}

//生成填空输入框
function fillBlank(id, title, pos, classes){
    // console.log(pos)
    var posReg = new RegExp(pos,'g')
    var blankLen = title.match(posReg).length
    var split = title.split(posReg)
    // console.log(blankLen)
    var newTitle = ''
    for(var i=0;i<(blankLen+split.length);i++){
        if(i%2===0){
            newTitle +=  '<p class="title">'+split[Math.floor(i/2)]+'</div>'
        }else{
            newTitle +=  new OO.ui.TextInputWidget( {
                name:prefixDic.textInputName+id+'-'+Math.floor(i/2),
                id:prefixDic.textInputId+id+'-'+Math.floor(i/2),
                classes:classes
            } ).$element.prop('outerHTML')
        }
        
    }
    return newTitle
}
//生成B、C型题的选择框
function dropDownInputWidget(id, availabelOptions){
    var options = []
    var select = $('<select class="dorpdown" id="'+prefixDic.selectId+id+'" name="'+prefixDic.selectName+id+'"></select>')
    for(var i=0;i<availabelOptions.length;i++){
        select.append('<option class="dropdown-option" value="'+availabelOptions[i]+'">'+availabelOptions[i]+'</option>')
    }
    return select
}
//生成options(options 是 Map对象)
function optionsGroup(type,id,options){
    var flexClass = (type==='B')||(type==='C') ? 'optionsGroup-flex':''
    var inputType = type==='X' ? 'checkbox':'radio'
    var optionGroupObj = $('<div class="optionsGroup '+flexClass+'"></div>')
    options.forEach(function(value, key, map){
        optionGroupObj.append(optionInline(id, key, value, !((type==='B')||(type==='C')), inputType))
    })
    return optionGroupObj
}
//生成optionInline
function optionInline(id, option, content,input,inputType){
    var idPrefix = inputType === 'checkbox' ? prefixDic.checkBoxId:prefixDic.radioId
    var namePrefix = inputType === 'checkbox' ? prefixDic.checkBoxName:prefixDic.radioName // 这个和外部的div的id一样就共用了

    var input = input ? $('<input id="'+ idPrefix + id+'-'+option+'" name="'+ namePrefix + id + '" type="'+inputType+'" value="' + option + '" />'):''
    var optionLabel = $('<label for="'+ idPrefix + id+'-'+option+'">'+option+'. </label>')
    var contentLabel = $('<label for="'+ idPrefix + id+'-'+option+'">'+content+'</label>')
    return $('<div id="'+ namePrefix +id+'-'+option+'" class="optionInline"></div>').append(input,optionLabel,contentLabel)
}
//清理json中的choice(清除空项并排序),接收Obj,
function cleanAndMakeSameLenOptions(options){
	//清除空项
	var options = filterEmptyEntries(options)
	//让所有option长度一样
	var maxOptionLen = getStrLength(Object.values(options).sort(function(a,b){return getStrLength(b) - getStrLength(a)})[0])
	for(var i in options){
		var minus = maxOptionLen - getStrLength(options[i])
		for(var n=0;n<minus;n++){
			options[i] += '&ensp;'
		}
	}
	// console.log(options)
    return sortDicByKey(options) //返回一个 Map 对象
}
function newTimu(id,json, settings){
    settings = json.settings===undefined||json.isA3 ? settings:json.settings//检测json是否带有settings或者是否为A3子题目

    parent = settings.parent === undefined ? '' : settings.parent
    showHr = settings.showHr == undefined ? true : settings.showHr
    showSubmitBtn = settings.showSubmitBtn === undefined ? true : settings.showSubmitBtn
    showEditBtn = settings.showEditBtn === undefined ? true : settings.showEditBtn
    showBtnGroup = settings.showBtnGroup === undefined? true:settings.showBtnGroup

    var o = new Object()
    o.type = json.type
    o.pos = json.pos
    o.inputBox = json.inputBox
    o.source = json.source
    o.sourceRange = json.sourceRange
    o.info = json.info
    o.title = json.title
    o.options = json.choices
    // console.log(o.options)
    //将choice 统一为Array的转换为obj
    if(typeOfObj(o.options)==='[object Array]'&&o.options.length===1&&o.type!=='A3'){
    	o.options = o.options[0]
    }
    o.options = o.options!==undefined? cleanAndMakeSameLenOptions(o.options):''
    // console.log(o.options)

    o.answer = json.answer
    o.explain = json.explain

    o.temp = {
        main:$('<div name="timu-'+(id+1)+'" id="'+id+'" class="type'+o.type+' timuContainer"><p class="timuID">'+id+'</p></div>'),
    }

    o.parent = parent
    // if(this.type==='A3'){
    //     	$(this).children('.subject').children('.editThisButton').fadeIn(1)
    //     }
    o.temp.main.hover(function () {
        $('editThis-' + id).fadeIn(10)
    },function (){
        $('editThis-' + id).fadeOut(70)
    })

    o.A = function () {
        //subjectForm 
        this.type = json.isA3?'A3':'A'
        var optionsGroupObj = optionsGroup(this.type, id, this.options)
        if(json.isA3){
            var titleInlineObj = titleInline(id, 'A3',this.source,undefined,this.title,'titleInline')
        }else{
            var titleInlineObj = titleInline(id, this.type,this.source,undefined,this.title,'titleInline')
        }
        
        var buttonGroupObj = showBtnGroup? buttonGroup(showSubmitBtn, showEditBtn, id, this.type, this.answer, this.temp.main):''
        var subjectForm = subjectFrom(id,this.type, [titleInlineObj, optionsGroupObj])
        //resultGroupObj
        var answerInlineObj = answerInline(this.answer)
        var explainInlineObj = this.explain === undefined || this.explain === '' ? '暂无解析' : explainInline(this.explain)
        var resultGroupObj = resultGroup(id, [answerInlineObj, explainInlineObj])

        this.temp.main.append(subjectForm,resultGroupObj,buttonGroupObj )

        if(showHr){this.temp.main.append('<hr>')}
        return this.temp.main
    }
    o.A2 = function () {
        //subjectForm 
        var optionsGroupObj = optionsGroup(this.type, id, this.options)
        var titleInlineObj = titleInline(id, this.type,this.source,undefined,this.title,'titleInline')
        var buttonGroupObj = buttonGroup(showSubmitBtn, showEditBtn, id, this.type, this.answer, this.temp.main)
        var subjectForm = subjectFrom(id,this.type, [titleInlineObj, optionsGroupObj])
        //resultGroupObj
        var answerInlineObj = answerInline(this.answer)
        var explainInlineObj = this.explain === undefined || this.explain === '' ? '暂无解析' : explainInline(this.explain)
        var resultGroupObj = resultGroup(id, [answerInlineObj, explainInlineObj])

        this.temp.main.append(subjectForm,resultGroupObj,buttonGroupObj )

        if(showHr){this.temp.main.append('<hr>')}
        return this.temp.main
    }
    o.A3 = function () {
        // console.log(settings)
        var realSource = getRealSource(json.source)
        var sourcePrefix = realSource.prefix===''?'':realSource.prefix
        //subjectForm 
        var range = rangeInline(this.source, this.sourceRange)
        var info = infoInline(this.info)

        var subTitlesList = []
        for(var i=0;i<this.title.length;i++){
            if(this.explain[i]==undefined){
                this.explain[i] = '暂无解析'
            }
            var data = {
                'isA3':true,
                "type":"A",
                "source":sourcePrefix+realSource.source+'-'+(i+1),
                "title":this.title[i],
                "answer":this.answer[i],
                "explain":this.explain[i],
                "choices":this.options.get(i+''),
            }
            // console.log(data)
            // console.log(this.options)
            subTitlesList.push(newTimu(id+'-'+i,data,{
                showHr:false,
                showEditBtn:false,
                showSubmitBtn:false,
                showBtnGroup:false
            }).A())
        }
        
        // console.log(this.answer)
        var buttonGroupObj  = buttonGroup(true, false, id, this.type, this.answer, this.temp.main)
        // console.log(buttonGroupObj)
        var subjectFormObj = subjectDIV(id,this.type, [subTitlesList])
        this.temp.main.append(range,info, subjectFormObj, buttonGroupObj)

        this.temp.main.append('<hr>')
        return this.temp.main
    }
    o.B = function () {
        var realSource = getRealSource(json.source)
        var sourcePrefix = realSource.prefix===''?'':realSource.prefix
        //subjectForm 
        var range = rangeInline(this.source, this.sourceRange)
        var optionsGroupObj = optionsGroup(this.type, id, this.options)
        var titleInlineList = []
        for(var i=0;i<this.title.length;i++){
            var dropdown = dropDownInputWidget(id+'-'+i, mapKeysList(this.options))
            var titleInlineObj = titleInline(id+'-'+i, this.type, json.source, i, this.title[i],'titleInline')
            titleInlineObj.append(dropdown)
            titleInlineList.push(titleInlineObj)
        }
        var titlesGroupObj = titlesGroup(titleInlineList)
        var buttonGroupObj = buttonGroup(showSubmitBtn, showEditBtn, id, this.type, this.answer, this.temp.main)

        var subjectForm = subjectFrom(id,this.type, [optionsGroupObj, titlesGroupObj])

        //resultGroupObj
        var resultGroupList = []
        for(var i=0;i<this.answer.length;i++){
            var answerInlineObj = answerInline(this.answer[i])
            var explainInlineObj = this.explain[i] === undefined || this.explain[i] === '' ? '暂无解析' : explainInline(this.explain[i])
            resultGroupList.push(
                    '<b>'+sourcePrefix+realSource.source+'-'+i+'</b>',
                    $('<div style="margin-left:10px"></div>').append(answerInlineObj),
                    $('<div style="margin-left:10px"></div>').append(explainInlineObj)
                )
        }
        var resultGroupObj = resultGroup(id, resultGroupList)

        this.temp.main.append(range ,subjectForm,resultGroupObj, buttonGroupObj)

        if(showHr){this.temp.main.append('<hr>')}
        return this.temp.main
    }
    o.C = function () {
        var realSource = getRealSource(json.source)
        var sourcePrefix = realSource.prefix===''?'':realSource.prefix
        //subjectForm 
        var range = rangeInline(this.source, this.sourceRange)
        var optionsGroupObj = optionsGroup(this.type, id, this.options)
        var titleInlineList = []
        for(var i=0;i<this.title.length;i++){
            var dropdown = dropDownInputWidget(id+'-'+i, mapKeysList(this.options))
            var titleInlineObj = titleInline(id+'-'+i, this.type, json.source, i, this.title[i],'titleInline')
            titleInlineObj.append(dropdown)
            titleInlineList.push(titleInlineObj)
        }
        var titlesGroupObj = titlesGroup(titleInlineList)
        var buttonGroupObj = buttonGroup(showSubmitBtn, showEditBtn, id, this.type, this.answer, this.temp.main)

        var subjectForm = subjectFrom(id,this.type, [titlesGroupObj, optionsGroupObj])

        //resultGroupObj
        var resultGroupList = []
        for(var i=0;i<this.answer.length;i++){
            var answerInlineObj = answerInline(this.answer[i])
            var explainInlineObj = this.explain[i] === undefined || this.explain[i] === '' ? '暂无解析' : explainInline(this.explain[i])
            resultGroupList.push(
                    '<b>'+sourcePrefix+realSource.source+'-'+i+'</b>',
                    $('<div style="margin-left:10px"></div>').append(answerInlineObj),
                    $('<div style="margin-left:10px"></div>').append(explainInlineObj)
                )
        }
        var resultGroupObj = resultGroup(id, resultGroupList)

        this.temp.main.append(range ,subjectForm,resultGroupObj, buttonGroupObj)

        if(showHr){this.temp.main.append('<hr>')}
        return this.temp.main
    }
    o.X = function () {
        //subjectForm 
        var optionsGroupObj = optionsGroup(this.type, id, this.options)
        var titleInlineObj = titleInline(id, this.type,this.source,undefined,this.title,'titleInline')
        var buttonGroupObj = showBtnGroup? buttonGroup(showSubmitBtn, showEditBtn, id, this.type, this.answer, this.temp.main):''
        var subjectForm = subjectFrom(id,this.type, [titleInlineObj, optionsGroupObj])
        //resultGroupObj
        var answerInlineObj = answerInline(this.answer)
        var explainInlineObj = this.explain === undefined || this.explain === '' ? '暂无解析' : explainInline(this.explain)
        var resultGroupObj = resultGroup(id, [answerInlineObj, explainInlineObj])

        this.temp.main.append(subjectForm,resultGroupObj,buttonGroupObj )

        if(showHr){this.temp.main.append('<hr>')}
        return this.temp.main
    }
    o.PD = function () {
    	var dic = {
		      right: ['对', '正确', 't', '✓', '√', '1', 'true'],
		      wrong: ['错', '错误', '×', 'x', 'f', 'false', 'wrong', '0']
		    }
        var ans = ''
        var ansOption = ''
        if(isInArray(dic.right, json.answer.toLowerCase())){
            ans = '正确'
            ansOption = 'A'
        }else if(isInArray(dic.wrong, json.answer.toLowerCase())){
            ans = '错误'
            ansOption = 'B'
        }else {
        	ans = '系统错误:该判断题答案不符合标准格式'
        }

        //subjectForm 
        var option = new Map()
        option.set('A', '正确')
        option.set('B', '错误')
        var optionsGroupObj = optionsGroup(this.type, id, option)
        var titleInlineObj = titleInline(id, this.type,this.source,undefined,this.title,'titleInline')
        var buttonGroupObj = showBtnGroup? buttonGroup(showSubmitBtn, showEditBtn, id, 'A', ansOption, this.temp.main):''
        var subjectForm = subjectFrom(id,this.type, [titleInlineObj,optionsGroupObj])
        //resultGroupObj
        var answerInlineObj = answerInline(ans)
        var explainInlineObj = this.explain === undefined || this.explain === '' ? '暂无解析' : explainInline(this.explain)
        var resultGroupObj = resultGroup(id, [answerInlineObj, explainInlineObj])

        this.temp.main.append(subjectForm,resultGroupObj,buttonGroupObj )

        if(showHr){this.temp.main.append('<hr>')}
        return this.temp.main
    }
    o.TK = function () {
        var tkTitle = fillBlank(id, this.title, this.pos, ['text-input-tk'])
        var titleInlineObj = titleInline(id, this.type,this.source,undefined,tkTitle, 'titleInline-no-flex')
        titleInlineObj.children('.text-input-tk').each(function(i,v){
            // console.log(i,v)
            $(this).children('input').css(
                'display','inline'
            )
            $(this).children('input').css(
                'width','200px'
            )
        })
        var buttonGroupObj = showBtnGroup? buttonGroup(showSubmitBtn, showEditBtn, id, this.type, this.answer, this.temp.main):''
        var subjectForm = subjectFrom(id,this.type, [titleInlineObj])

        this.temp.main.append(subjectForm, buttonGroupObj)

        if(showHr){this.temp.main.append('<hr>')}
        return this.temp.main
    }
    o.MJ = function () {
        var mjTitle = ''
        if(this.inputBox===0){
            mjTitle = json.title + ':<span class="blur" tabindex="0" style="display:inline;outline=0;" onclick="">' + json.answer +'</span>'
        }else{
            mjTitle = fillBlank(id, this.title+':()', '()', ['text-input-mj'])
        }
        var titleInlineObj = titleInline(id, this.type,this.source,undefined,mjTitle, 'titleInline-no-flex')
        titleInlineObj.children('.text-input-mj').each(function(i,v){
            // console.log(i,v)
            $(this).children('input').css(
                'display','inline'
            )
            $(this).children('input').css(
                'width','auto'
            )
        })
        var buttonGroupObj = this.inputBox!==0 ? buttonGroup(showSubmitBtn, showEditBtn, id, 'TK', [this.answer], this.temp.main):''
        var subjectForm = subjectFrom(id,this.type, [titleInlineObj])

        this.temp.main.append(subjectForm, buttonGroupObj)
        if(showHr){this.temp.main.append('<hr>')}
        return this.temp.main
    }
    return o
}

// // 获取select的选项
function getSelectedAnswer(id){
    var data = formToJSON('#'+prefixDic.formId + id,true)
    console.log(data)
    return data
}
// // 获取checkbox值
function  getCheckBoxValue(name) {
    var  ids = $('input:checkbox[name="'+name+'"]:checked');
    var data = [];
     for (var i = 0; i < ids.length; i ++) {
         data.push(ids[i].value)
     }
     return data
}
function showThisAnswer(id,type,correctAnswer){
	var isRight = false
    var resultGroup = $('#resultGroup-'+id)
    resultGroup.fadeIn(100)
    $('#showThisAnswer-'+id).fadeOut(1)

    if(type==="A" || type ==='A2'){
        var optionGroupName = prefixDic.radioName+id
        var optionInlinePrefixID = prefixDic.radioName+id
        var usersChoice = getSelectedAnswer(id)[optionGroupName]
		console.log(usersChoice)
        var correctDivObj = $('#'+optionInlinePrefixID + '-' + correctAnswer)
        var usersChoiceDivObj = $('#'+optionInlinePrefixID + '-' + usersChoice)
        
        if(usersChoice===correctAnswer){
            correctDivObj.addClass('correct')
            isRight = true
        }else{
            correctDivObj.addClass('correct')
            usersChoiceDivObj.addClass('wrong')
        }

    }else if(type==='A3'){
        for(var i=0;i<correctAnswer.length;i++){
            //以下与A型题时一样的代码,知识用subID替换ID变量
            showThisAnswer(id+'-'+i,'A',correctAnswer[i])
        }
    } else if(type==='B'){
        var dropDownInputPrefix = 'select-'+id +'-'
        var usersChoice = getSelectedAnswer(id)
        // console.log(usersChoice)

        for(var i in usersChoice){
            var dorpdownID = i.replace(dropDownInputPrefix,'')//获取子ID
            var subTimuID = id+'-'+dorpdownID
            var thisTimuUsersChoice = usersChoice[i]
            var thisTimuCorrectAnswer = correctAnswer[dorpdownID]
            var subTimuDiv = $('#title-'+subTimuID)

            if(thisTimuUsersChoice===thisTimuCorrectAnswer){
                subTimuDiv.addClass('correct')
            }else{
                subTimuDiv.addClass('wrong')
                subTimuDiv.append('<label class="answerTip">正确答案:'+thisTimuCorrectAnswer+'</label>')
            }
        }
    } else if(type=="C"){
        var dropDownInputPrefix = 'select-'+id +'-'
        var usersChoice = getSelectedAnswer(id)
        // console.log(usersChoice)

        for(var i in usersChoice){
            var dorpdownID = i.replace(dropDownInputPrefix,'')//获取子ID
            var subTimuID = id+'-'+dorpdownID
            var thisTimuUsersChoice = usersChoice[i]
            var thisTimuCorrectAnswer = correctAnswer[dorpdownID]
            var subTimuDiv = $('#title-'+subTimuID)

            if(thisTimuUsersChoice===thisTimuCorrectAnswer){
                subTimuDiv.addClass('correct')
            }else{
                subTimuDiv.addClass('wrong')
                subTimuDiv.append('<label class="answerTip">正确答案:'+thisTimuCorrectAnswer+'</label>')
            }
        }
    }else if(type=="X"){
        var optionGroupName = 'checkbox-'+id
        var optionInlinePrefixID = 'checkbox-'+id
        var usersChoice = getCheckBoxValue(optionGroupName).sort()
        correctAnswer = correctAnswer.match(/[A-Z]/g).sort()
        var lenCorrect = correctAnswer.length
        var lenUser = usersChoice.length
        // console.log(correctAnswer)
        for(var i=0;i<lenUser;i++){
            // console.log(isInArray(correctAnswer, usersChoice[i]),usersChoice[i] ,correctAnswer)
            if(!isInArray(correctAnswer, usersChoice[i])){
                $('#'+optionInlinePrefixID + '-' + usersChoice[i]).addClass('wrong')
            }
        }

        for(var i=0;i<lenCorrect;i++){
            if(!isInArray(usersChoice,correctAnswer[i])){
                $('#'+optionInlinePrefixID + '-' + correctAnswer[i]).addClass('notChoiced')
            }else {
                $('#'+optionInlinePrefixID + '-' + correctAnswer[i]).addClass('correct')
            }
        }

        
    }else if(type=="TK"){
        var textInputPrefix = prefixDic.textInputId+id+'-'
        var usersChoice = getSelectedAnswer(id)
        for(var i in usersChoice){
            var inputID = i.replace(textInputPrefix,'')
            // console.log('#'+i)
            var corrcetAnswerText = correctAnswer[inputID]===undefined?'暂无答案':correctAnswer[inputID]
            if(usersChoice[i]===correctAnswer[inputID]){
                $('#'+i).html('<label class="answerTip correct">'+corrcetAnswerText+'</label>')
            }else{
                $('#'+i).after('<label class="answerTip wrong">'+corrcetAnswerText+'</label>')
            }
        }
    }
    if(isRight){
    	locateTo(id+1)
    }
}
function removeBackground(obj){
    obj.addClass('no-background')
}