jQuery/JavaScript 点击后,列出 ID 的名称
jQuery/JavaScript on click, list ID's names
首先,我的 javascript 非常有限,所以我不会自己尝试任何东西,因为我不知道从哪里开始
所以,我的网站有这个结构,
ul{list-style-type: none;padding:0}
<button class="clickme" type="button">Click Me!</button>
<ul>
<li id="colors_body"><input type="text" class="color_input" value="ffffff"></li>
<li id="colors_wrapper"><input type="text" class="color_input" value="000000"></li>
<li id="colors_footer"><input type="text" class="color_input" value="575757"></li>
<!--There will be at least 30-40 of elements like this that contains text input tags-->
<!--And, this list arent always have Text inputs tags, there are also other tags for example, radio, select...etc-->
<!-- <li id="radio-toggle"><input type="radio" class="radio_input" value="toggle"></li> -->
</ul>
<div class="list">
</div>
基本上,一堆 li
标签,每个标签都有一个特定的 ID
,每个列表都包含一个文本 input
标签,它们有一个 class名为 color_input
所以,在 jQuery 单击 clickme
按钮时,我想列出所有 li
ID names 及其输入 值在div
例如,在单击 clickme
按钮时,我想获得这样的列表
'colors_body' => 'ffffff',
'colors_wrapper' => '000000',
'colors_footer' => '575757',
编辑: 但我需要得到一个列表,其中文本输入标签仅用于颜色,这应该很容易映射列表,因为这个输入标签有一个特定的 class 名为 color_input
这样做的原因是因为还有其他输入类型,如收音机、select...等
您应该将事件点击附加到 clickme
按钮,例如:
$('.clickme').on('click', function(){
//Your logic here
});
然后使用 each()
方法遍历所有 li
并使用 jQuery 方法 append()
将值分配给 div
:
$('div').append( $(this).attr('id') + ' => ' + $('input', this).val() + '<br/>' );
希望对您有所帮助。
$('.clickme').on('click', function(){
$('ul li').each(function(){
$('div').append( $(this).attr('id')+' => '+$('input', this).val()+'<br/>' );
})
});
ul{list-style-type: none;padding:0}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="clickme" type="button">Click Me!</button>
<ul>
<li id="colors_body"><input type="text" value="ffffff"></li>
<li id="colors_wrapper"><input type="text" value="000000"></li>
<li id="colors_footer"><input type="text" value="575757"></li>
</ul>
<div class="list">
</div>
毫不奇怪,用 jQuery 做到这一点是小菜一碟。
您需要像这样捕获对元素 .clickme
的点击:
$('.clickme').click(function() {
});
在其中,使用 jQuery .each()
循环对每个 li
执行一个函数,其 id 以 colors_
:[=21 开头=]
$('li[id^="colors_"]').each(function() {
});
在里面,获取元素的 ID 和文本,然后用它做任何你想做的事(在这个例子中我已经 console.log
得到它)
console.log($(this).attr('id') + " => " + $(this).children('input[type=text]').val());
$('.clickme').click(function() {
$('li[id^="colors_"]').each(function() {
console.log($(this).attr('id')+" => "+$(this).children('input[type=text]').val());
});
});
ul {
list-style-type: none;
padding: 0
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<button class="clickme" type="button">Click Me!</button>
<ul>
<li id="colors_body"><input type="text" value="ffffff"></li>
<li id="colors_wrapper"><input type="text" value="000000"></li>
<li id="colors_footer"><input type="text" value="575757"></li>
</ul>
使用纯 JS:Array.prototype.forEach
我们可以在列表项上做到这一点。
document.querySelector(".clickme").addEventListener("click", function(){
var div = document.querySelector("div.list");
//Iterate over every li
Array.prototype.forEach.call( document.querySelectorAll("ul > li[id^='color_']"), function(element){
var node = document.createTextNode(element.id + " => " + element.querySelector("input").value);
div.appendChild(node);
div.appendChild(document.createElement("br"));
});
}, true);// assign click handler to button
ul{list-style-type: none;padding:0}
<button class="clickme" type="button">Click Me!</button>
<ul>
<li id="colors_body"><input type="text" value="ffffff"></li>
<li id="colors_wrapper"><input type="text" value="000000"></li>
<li id="colors_footer"><input type="text" value="575757"></li>
</ul>
<div class="list">
</div>
首先使用所需的地图创建一个 对象 ,然后将其附加到 list
- 请参见下面的演示:
jQuery解法:
$('.clickme').click(function() {
$('ul li').map(function() {
return {
name: this.id,
value: $(this).find('input').val()
}
}).get().forEach(function(e) {
$('.list').append('<div>' + e.name + ' => ' + e.value + '</div>');
});
});
ul {list-style-type: none;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="clickme" type="button">Click Me!</button>
<ul>
<li id="colors_body"><input type="text" value="ffffff"></li>
<li id="colors_wrapper"><input type="text" value="000000"></li>
<li id="colors_footer"><input type="text" value="575757"></li>
</ul>
<div class="list"></div>
Javascript解法:
document.querySelector('.clickme').addEventListener('click', function() {
Array.prototype.map.call(document.querySelectorAll('ul li'), function(e) {
return {
name: e.id,
value: e.querySelector('input').value
}
}).forEach(function(e) {
document.querySelector('.list').innerHTML += '<div>' + e.name + ' => ' + e.value + '</div>';
});
});
ul {list-style-type: none;}
<button class="clickme" type="button">Click Me!</button>
<ul>
<li id="colors_body"><input type="text" value="ffffff"></li>
<li id="colors_wrapper"><input type="text" value="000000"></li>
<li id="colors_footer"><input type="text" value="575757"></li>
</ul>
<div class="list"></div>
使用querySelectorAll
& children
获取相关数据。
document.getElementById('clickMe').addEventListener('click', function() {
let inputText = "";
var obj = {};
document.querySelectorAll('li').forEach(function(item) {
inputText += item.id + ' ' + item.children[0].value + '<br/>'
})
document.getElementsByClassName('list')[0].innerHTML = inputText
})
ul {
list-style-type: none;
}
<button class="clickme" type="button" id="clickMe">Click Me!</button>
<ul>
<li id="colors_body"><input type="text" value="ffffff"></li>
<li id="colors_wrapper"><input type="text" value="000000"></li>
<li id="colors_footer"><input type="text" value="575757"></li>
</ul>
<div class="list">
</div>
首先,我的 javascript 非常有限,所以我不会自己尝试任何东西,因为我不知道从哪里开始
所以,我的网站有这个结构,
ul{list-style-type: none;padding:0}
<button class="clickme" type="button">Click Me!</button>
<ul>
<li id="colors_body"><input type="text" class="color_input" value="ffffff"></li>
<li id="colors_wrapper"><input type="text" class="color_input" value="000000"></li>
<li id="colors_footer"><input type="text" class="color_input" value="575757"></li>
<!--There will be at least 30-40 of elements like this that contains text input tags-->
<!--And, this list arent always have Text inputs tags, there are also other tags for example, radio, select...etc-->
<!-- <li id="radio-toggle"><input type="radio" class="radio_input" value="toggle"></li> -->
</ul>
<div class="list">
</div>
基本上,一堆 li
标签,每个标签都有一个特定的 ID
,每个列表都包含一个文本 input
标签,它们有一个 class名为 color_input
所以,在 jQuery 单击 clickme
按钮时,我想列出所有 li
ID names 及其输入 值在div
例如,在单击 clickme
按钮时,我想获得这样的列表
'colors_body' => 'ffffff',
'colors_wrapper' => '000000',
'colors_footer' => '575757',
编辑: 但我需要得到一个列表,其中文本输入标签仅用于颜色,这应该很容易映射列表,因为这个输入标签有一个特定的 class 名为 color_input
这样做的原因是因为还有其他输入类型,如收音机、select...等
您应该将事件点击附加到 clickme
按钮,例如:
$('.clickme').on('click', function(){
//Your logic here
});
然后使用 each()
方法遍历所有 li
并使用 jQuery 方法 append()
将值分配给 div
:
$('div').append( $(this).attr('id') + ' => ' + $('input', this).val() + '<br/>' );
希望对您有所帮助。
$('.clickme').on('click', function(){
$('ul li').each(function(){
$('div').append( $(this).attr('id')+' => '+$('input', this).val()+'<br/>' );
})
});
ul{list-style-type: none;padding:0}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="clickme" type="button">Click Me!</button>
<ul>
<li id="colors_body"><input type="text" value="ffffff"></li>
<li id="colors_wrapper"><input type="text" value="000000"></li>
<li id="colors_footer"><input type="text" value="575757"></li>
</ul>
<div class="list">
</div>
毫不奇怪,用 jQuery 做到这一点是小菜一碟。
您需要像这样捕获对元素 .clickme
的点击:
$('.clickme').click(function() {
});
在其中,使用 jQuery .each()
循环对每个 li
执行一个函数,其 id 以 colors_
:[=21 开头=]
$('li[id^="colors_"]').each(function() {
});
在里面,获取元素的 ID 和文本,然后用它做任何你想做的事(在这个例子中我已经 console.log
得到它)
console.log($(this).attr('id') + " => " + $(this).children('input[type=text]').val());
$('.clickme').click(function() {
$('li[id^="colors_"]').each(function() {
console.log($(this).attr('id')+" => "+$(this).children('input[type=text]').val());
});
});
ul {
list-style-type: none;
padding: 0
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<button class="clickme" type="button">Click Me!</button>
<ul>
<li id="colors_body"><input type="text" value="ffffff"></li>
<li id="colors_wrapper"><input type="text" value="000000"></li>
<li id="colors_footer"><input type="text" value="575757"></li>
</ul>
使用纯 JS:Array.prototype.forEach
我们可以在列表项上做到这一点。
document.querySelector(".clickme").addEventListener("click", function(){
var div = document.querySelector("div.list");
//Iterate over every li
Array.prototype.forEach.call( document.querySelectorAll("ul > li[id^='color_']"), function(element){
var node = document.createTextNode(element.id + " => " + element.querySelector("input").value);
div.appendChild(node);
div.appendChild(document.createElement("br"));
});
}, true);// assign click handler to button
ul{list-style-type: none;padding:0}
<button class="clickme" type="button">Click Me!</button>
<ul>
<li id="colors_body"><input type="text" value="ffffff"></li>
<li id="colors_wrapper"><input type="text" value="000000"></li>
<li id="colors_footer"><input type="text" value="575757"></li>
</ul>
<div class="list">
</div>
首先使用所需的地图创建一个 对象 ,然后将其附加到 list
- 请参见下面的演示:
jQuery解法:
$('.clickme').click(function() {
$('ul li').map(function() {
return {
name: this.id,
value: $(this).find('input').val()
}
}).get().forEach(function(e) {
$('.list').append('<div>' + e.name + ' => ' + e.value + '</div>');
});
});
ul {list-style-type: none;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="clickme" type="button">Click Me!</button>
<ul>
<li id="colors_body"><input type="text" value="ffffff"></li>
<li id="colors_wrapper"><input type="text" value="000000"></li>
<li id="colors_footer"><input type="text" value="575757"></li>
</ul>
<div class="list"></div>
Javascript解法:
document.querySelector('.clickme').addEventListener('click', function() {
Array.prototype.map.call(document.querySelectorAll('ul li'), function(e) {
return {
name: e.id,
value: e.querySelector('input').value
}
}).forEach(function(e) {
document.querySelector('.list').innerHTML += '<div>' + e.name + ' => ' + e.value + '</div>';
});
});
ul {list-style-type: none;}
<button class="clickme" type="button">Click Me!</button>
<ul>
<li id="colors_body"><input type="text" value="ffffff"></li>
<li id="colors_wrapper"><input type="text" value="000000"></li>
<li id="colors_footer"><input type="text" value="575757"></li>
</ul>
<div class="list"></div>
使用querySelectorAll
& children
获取相关数据。
document.getElementById('clickMe').addEventListener('click', function() {
let inputText = "";
var obj = {};
document.querySelectorAll('li').forEach(function(item) {
inputText += item.id + ' ' + item.children[0].value + '<br/>'
})
document.getElementsByClassName('list')[0].innerHTML = inputText
})
ul {
list-style-type: none;
}
<button class="clickme" type="button" id="clickMe">Click Me!</button>
<ul>
<li id="colors_body"><input type="text" value="ffffff"></li>
<li id="colors_wrapper"><input type="text" value="000000"></li>
<li id="colors_footer"><input type="text" value="575757"></li>
</ul>
<div class="list">
</div>