美文网首页
选词填空

选词填空

作者: kingLeft7 | 来源:发表于2021-12-20 15:38 被阅读0次
image.png

通过div的contentEditable属性 进行自定义
在光标后插入input

 <div class="sub-box">
        <div
          ref="value"
          class="subContent"
          id="content"
          outline="none"
          :contentEditable="true"
      
          @click="onclick"
          @keyup.delete="deleteValue"
        ></div>
        <button class="sub-bottom" @click="addValue">
          <div class="line"></div>
          <div class="line-bottom-box">
            <img class="add" src="../../../assets/gapFilling/add.png" alt="" />
            <div class="line-bottom-add">增加填空</div>
            <div class="fill-num">
              <span class="red-color">{{ addNum }}</span
              >/10
            </div>
          </div>
        </button>
      </div>
 // 插入input
    addValue() {
      let dom = document.getElementById('content')
      dom.focus()
      if (this.addNum < 10) {
        this.insertHtmlAtCaret()
        this.$nextTick(() => {
          this.addNum++
        })
      }
    },
  //在元素后插入新元素
    insertAfter(newElement, targetElement) {
      let parent = targetElement.parentNode
      if (parent.lastChild == targetElement) {
        parent.appendChild(newElement)
      } else {
        parent.insertBefore(newElement, targetElement.nextSibling)
      }
    },
 // 光标处添加input
    insertHtmlAtCaret() {
      let sel
      let input = document.querySelectorAll('.add-input')
      let el = document.createElement('input')
      this.num = input.length
      // 是点击获取得焦点
      if (this.clickFlag) {
        // 光标在input上
        if (this.rangeInutFlag && input.length !== 0) {
          el.setAttribute('type', 'text')
          el.setAttribute('placeholder', '输入正确答案')
          el.setAttribute('class', 'add-input')
          el.classList.add('add-input', `add-input${this.num}`)
          this.$nextTick(() => {
            el.focus()
          })
          let clickInput = document.getElementsByClassName(
            `add-input${this.rangeInputNum}`
          )

          this.insertAfter(el, clickInput[0])
          this.rangeInputNum = this.num - 1
          this.clickFlag = false
        } else {
          if (window.getSelection) {
            sel = window.getSelection()
            if (sel.getRangeAt(0) && sel.rangeCount) {
              let range = sel.getRangeAt(0)
              console.log(range, 'range')
              let el = document.createElement('input')
              el.setAttribute('type', 'text')
              el.setAttribute('placeholder', '输入正确答案')
              el.setAttribute('class', 'add-input')
              el.classList.add('add-input', `add-input${this.num}`)
              this.$nextTick(() => {
                // 添加完后 input自动获取焦点
                el.focus()
              })
              this.rangeInputNum = this.num - 1
              this.clickFlag = false
              range.insertNode(el)
            }
          }
        }
      } else {
        el.setAttribute('type', 'text')
        el.setAttribute('placeholder', '输入正确答案')
        el.setAttribute('class', 'add-input')
        el.classList.add('add-input', `add-input${this.num}`)
        this.$nextTick(() => {
          el.focus()
        })
        this.rangeInputNum = this.num - 1
        this.clickFlag = false
        let clickInput = document.getElementsByClassName(
          `add-input${this.rangeInputNum}`
        )
        this.insertAfter(el, clickInput[0])
      }

      // if (event.keyCode === 13) {
      //  el.classList.add('blue-input')
      // }
      // else if (document.selection && document.selection.type != 'Control') {
      //   // IE < 9
      //   document.selection.createRange().pasteHTML(html)
      // }
    },
   // 删除input
    deleteValue() {
      let input = document.querySelectorAll('.add-input')
      this.addNum = input.length
    },
 // 点击
    onclick() {
      // 通过判断是点击input或者文字处 再点击“添加input” 还是点击“添加input”紧接再点击“添加input”
      this.clickFlag = true
      if (document.activeElement.className.slice(0, 9) === 'add-input') {
        this.rangeInutFlag = true
        this.rangeInputNum = document.activeElement.className.slice(19, 20)
      } else {
        this.rangeInutFlag = false
      }
      console.log(
        document.activeElement.className,
        this.rangeInputNum,
        'this.rangeInputNum'
      )
    },

多多指教~

相关文章

  • 选词填空

    Step 1.标明词意:注意v. -ing形式,有可能是动名词或形容词注意懂词义的词的生僻词性 2.读通句子大意,...

  • 选词填空

    一个两个 三个四个 哦 我好像在哪见过你 五个六个 七个八个 呀 一定见过的 可是 我怎么也想不起来了 九个十个 ...

  • 选词填空

    通过div的contentEditable属性 进行自定义在光标后插入input 多多指教~

  • 六级

    六级阅读真难,一起做才发现选词填空和快速阅读是最难的,选词填空对两三个,快速阅读错一半。

  • 大学英语四级解题技巧

    大学英语四级阅读:选词填空技巧汇总 选词填空的考察形式 一篇280词左右的文章,文章中挖出10个空,并统一给出A-...

  • 英语练习

    第四周 选词填空 but,good at, weak in,like, or, and I. They dont ...

  • 英语流利说 Level 6-Unit 3-Part 1-Dial

    选词填空 I thought it went okay at first, but I could feel th...

  • 2018.6(1)~选词填空

    1.chronicles n.编年史 v.记录,将…载入编年史中 "AERAGRAM",which chronic...

  • 2018.6 (2)~选词填空

    1.campaign n.活动,运动 2.career n.职业 3.characters n.性格,人物 4.f...

  • 做英语选词填空

    判定选项的词性。 一般为名词n,形容词adj,副词adv,动词v。 判断文中空格处应填的词性 名词 1、做句子主语...

网友评论

      本文标题:选词填空

      本文链接:https://www.haomeiwen.com/subject/hmrzfrtx.html