如何通过单击从div捕获数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过单击从div捕获数据相关的知识,希望对你有一定的参考价值。

我想通过单击并输入跨度从选定的div(即国家名称)中捕获数据,此外,我想找到标记选定的div的方法,但也不要取消标记先前选定的其他div。

https://codepen.io/tatasek/pen/PoojNGL

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="style.css">
    <title>Document</title>
</head>
<body>
    <div class="div div__first"></div>
    <div class="div div__second"></div>
    <div class="div div__third"></div>

    <p>I have selected:<span class="selectedCountry"></span></p>
    <script src="app.js"></script>
</body>
</html>

CSS

body{
    display: flex;
    height: 100vh;
    justify-content: center;
    align-items: center;;
}

.div{
    margin-left: 10px;
    padding: 3px;
    border: 2px solid black;
    background-color: skyblue;
    cursor: pointer;
}

p{
    margin-left: 10px;;
}
.active{
  background-color: yellow;
}

JS

const countries = ['Lithuania', 'Latvia', 'Estonia'];
const divList = document.querySelectorAll('.div');

divList.forEach(function(div, index){
    div.textContent = countries[index];

})

感谢您的时间!米哈尔

答案

基于您到目前为止所做的事情,我刚刚添加了一些事件侦听器以检查更改并将选定的项目添加到列表中。让我知道是否需要进一步说明。

const countries = ['Lithuania', 'Latvia', 'Estonia'];
const divList = document.querySelectorAll('.div');

divList.forEach(function(div, index){
div.textContent = countries[index];
div.addEventListener('click', function(){
  divList.forEach(function(el, i) {
    el.classList.remove('active')
  })
  this.classList.toggle('active');
})

})



var choices = document.getElementsByTagName('div')

for(var i = 0; i < choices.length; i++) {
  choices[i].addEventListener('click', function() {
     document.getElementsByClassName('selectedCountry')[0].innerText = 
document.getElementsByClassName('active')[0].innerText;



  })
}
body{
    display: flex;
    height: 100vh;
    justify-content: center;
    align-items: center;
}

.div{
    margin-left: 10px;
    padding: 15px;
    border: 2px solid black;
    background-color: skyblue;
    cursor: pointer;
}

p{
    margin-left: 10px;
}

.active{
  background-color: yellow;
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="style.css">
    <title>Document</title>
</head>
<body>
    <div class="div div__first"></div>
    <div class="div div__second"></div>
    <div class="div div__third"></div>

    <p>I have selected:<span class="selectedCountry"></span></p>
    <script src="app.js"></script>
</body>
</html>
另一答案

尝试

for (let i = 0; i < document.getElementsByClassName('div').length; i++) {
   document.getElementsByClassName('div')[i].addEventListener('click', appendToSpan, false);
}
function appendToSpan(e) {
   document.getElementsByClassName('selectedCountry')[0].innerText += e.target.innerText;
}

编辑:

更改为:

const countries = ['Lithuania', 'Latvia', 'Estonia'];
const divList = document.querySelectorAll('.div');

divList.forEach(function(div, index){
    div.textContent = countries[index];
    div.addEventListener('click', function() {
      this.classList.toggle('active');
      if (this.classList.contains('active')) {
         document.getElementsByClassName('selectedCountry')[0].classList.add(this.innerText);
      } else {
         document.getElementsByClassName('selectedCountry')[0].classList.remove(this.innerText);
      }
      let classes = document.getElementsByClassName('selectedCountry')[0].getAttribute('class').split(' ');
      document.getElementsByClassName('selectedCountry')[0].innerText = '';
      for (let i = 1; i < classes.length; i++) {
         document.getElementsByClassName('selectedCountry')[0].innerText += classes[i]
      }
    })
})
另一答案

我已经在每个addEventListenerclick事件上使用了div。另外,我还创建了selected变量,该变量是array并保留选定的项目。单击时,我通过selected函数检查所选值是否在indexOf()变量中,如果没有,则返回-1。然后我将push()值赋给数组(如果尚未选择),或者通过值的splice()index删除它。数组由join()函数打印,该函数连接数组的每个值,

const divList = document.querySelectorAll('.div');
const output = document.querySelector('.selectedCountry');
const countries = ['Lithuania', 'Latvia', 'Estonia'];
let selected = [];

divList.forEach((div, index) => {
    div.textContent = countries[index];
    div.addEventListener('click',()=> {
      var indexOfDiv = selected.indexOf(countries[index]);
      (indexOfDiv >= 0) 
        ? (selected.splice(indexOfDiv,1) && div.classList.remove('selected'))
        : (selected.push(div.textContent) && div.classList.add('selected'))
      output.textContent = selected.join(', ');
    });
});
.div { border: 1px solid lightgray; margin: 0.5rem; padding: 0.25rem 0.4rem; }
.div.selected { border-color: lightgreen; }
<div class="div div__first"></div>
<div class="div div__second"></div>
<div class="div div__third"></div>
<p>I have selected:<span class="selectedCountry"></span></p>
另一答案

const countries = ['Lithuania', 'Latvia', 'Estonia'];
const divList = document.querySelectorAll('.div');
const selectedCountry = document.getElementsByClassName('selectedCountry')[0];

function clearSelection() {
  divList.forEach(function(div) {
    div.classList.remove('active');
  })
}

divList.forEach(function(div, index){
    div.textContent = countries[index];
    div.addEventListener('click', function() {
      clearSelection();
      this.classList.add('active');
      selectedCountry.innerText = document.getElementsByClassName('active')[0].innerText;
    })
})
body{
    display: flex;
    height: 100vh;
    justify-content: center;
    align-items: center;
}

.div{
    margin-left: 10px;
    padding: 15px;
    border: 2px solid black;
    background-color: skyblue;
    cursor: pointer;
}

p{
    margin-left: 10px;
}

.active{
  background-color: yellow;
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="style.css">
    <title>Document</title>
</head>
<body>
    <div class="div"></div>
    <div class="div"></div>
    <div class="div"></div>

    <p>I have selected:<span class="selectedCountry"></span></p>
    <script src="app.js"></script>
</body>
</html>

以上是关于如何通过单击从div捕获数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在片段中从相机捕获图像,

如何从Android中的片段单击按钮打开片段

如何在 Android 中单击 ImageView 时从一个片段移动到另一个片段?

如何在 FAB 按钮单击时将数据从多个片段发送到单个活动

如何将列表视图中的数据从一个片段发送到另一个片段

从片段中获取意图值后,我如何在 recyclerview 项目中实现单击