<select name="List" id="List">
<option value="">-Select-</option>
<option value="">--Product--</option>
<option value="">product1</option>
<option value="">product2</option>
<option value="">product3</option>
<option value="">--Software--</option>
<option value="">software1</option>
<option value="">software2</option>
<option value="">software3</option>
<option value="">--Services--</option>
<option value="">service1</option>
<option value="">service2</option>
<option value="">service3</option>
</select>
我的HTML选择字段中有上面的列表。
我希望能够只获得价值 - 产品 - , - 软件 - , - 服务 - 所以我创建了一个循环来抛出产品列表并使用方法startwith来拾取以“ - ”开头的值。
function loadFilter() {
var x = document.getElementById('List');
var i;
var n;
for (i = 0; i < x.length; i++) {
str = x[i].text
var n = str.startsWith('--');
flag = true;
if (n == true) {
alert(x[i].text); // list --Product--, --Software--, --Services--
alert(x[3].text); // prints from the LIST <product1> and not <--Services-->
}
}
}
因此,当该标志为真时,alert(x[i].text);
正确列出值( - Product - , - Software - , - Services - )。
但是当我尝试通过它们的值(索引)来获取它们时,EG ..我只需要获取(--Services--),所以我使用x[3].text)
,但这会返回整个List值&GT;&GT;而不是&lt; - Services - &gt;。
答案 0 :(得分:1)
您可以使用以下代码使用“ - ”选项列表填充数组arr
。
然后,您可以使用arr[2]
获取--Services--
。
var arr = [];
[].slice.call(document.querySelectorAll("#List option")).map(function(el){
if (el.text.indexOf("--") === 0) arr.push(el.text);
});
console.log(arr)
console.log(arr[2])
<select name="List" id="List">
<option value="">-Select-</option>
<option value="">--Product--</option>
<option value="">product1</option>
<option value="">product2</option>
<option value="">product3</option>
<option value="">--Software--</option>
<option value="">software1</option>
<option value="">software2</option>
<option value="">software3</option>
<option value="">--Services--</option>
<option value="">service1</option>
<option value="">service2</option>
<option value="">service3</option>
</select>
答案 1 :(得分:0)
我仍然不完全确定你要做什么。 --Services--是索引9,而不是3.要获得--Services--,你需要x[9].text
如果你想将三个--xx--重新排列到他们自己的索引中,你需要将它们推入一个新的数组,如下所示:
var output = []
if (n === true) output.push(x[i].text)
console.log(output[2]) // --Services--
答案 2 :(得分:0)
你走了:
function loadFilter() {
var element = document.getElementById('List');
var children = element.children;
var filtered = [];
for (var i = 0; i < children.length; i++) {
if (children[i].textContent.startsWith('--')) {
filtered.push(children[i].textContent);
}
}
return filtered;
}
重温一下这个功能:
答案 3 :(得分:0)
您可以使用简单的forEach循环来循环遍历此处的元素,但首先需要从DOM节点列表中创建数组:
<!DOCTYPE html>
<html>
<head>
<script>
var Christmas = new Date ("December, 25, 2017");
var toDay = new Date ();
var then = Christmas.getTime();
var now = toDay.getTime();
var diff = (then-now)/(1000*60*60*24);
document.writeIn ( " [Note: Get ready... There are only " + Math.round(diff) + " days until Christmas!] " );
</script>
<title>abc</title>
</head>
<body>
</body>
</html>
我把它放在小提琴上,这样你就可以检查: https://jsfiddle.net/pegla/qokwarcy/
答案 4 :(得分:0)
首先,你根本没有看到过使用过你的旗帜。
如果我理解正确,你试图使用x[3].text
来获取--Services--但是如果你计算整个列表,则索引[3]中的元素就是。您可以使用以下代码验证:
f (n == true) {
alert('index '+ i + ': ' + x[i].text); // list --Product--, --Software--, --Services--
}
您可以创建一个包含已过滤选项的新数组,然后使用已知索引访问该数组:
var filteredArray = [];
f (n == true) {
filteredArray.push(x[i]); //insert the element in the new array.
}
alert(filteredArray[2].text) //print --Service--, the third element of filtered array.
请记住,javascript的索引数组为零,因此第一个元素的索引为0,因此,为了访问第三个元素,您需要索引2.
答案 5 :(得分:0)
您可能想尝试使用optgroups
吗?
这样的事情:
<select name="List" id="List">
<option value="">-Select-</option>
<optgroup label="--Product--">
<option value="">product1</option>
<option value="">product2</option>
<option value="">product3</option>
</optgroup>
<optgroup label="--Software--">
<option value="">software1</option>
<option value="">software2</option>
<option value="">software3</option>
</optgroup>
<optgroup label="--Services--">
<option value="">service1</option>
<option value="">service2</option>
<option value="">service3</option>
</optgroup>
</select>
然后,
var select = document.getElementById('List');
var optgroups = select.getElementsByTagName('optgroup');
console.log(optgroups[2].label);
将显示:
--Services--
答案 6 :(得分:0)
尝试:
function load() {
list = document.getElementById('List');
var data = document.getElementsByTagName('option');
currentCatagory=null;//the current selected catagory
currentvalue=null;
listdata=[];
//for all the options
for(cnt = 0; cnt < data.length; cnt++){
var e = data[cnt].innerHTML;//get option text
if(e.startsWith('-')){//test to make a catagory out of it
if(currentCatagory!=null)//do not concat is listdata is null
listdata=listdata.concat(currentCatagory);
currentCatagory = {"this":e,"listOfItems":[]};//create the catagory
}else if(currentCatagory!=null){//make sure currentCatagory is not null
var l=currentCatagory.listOfItems;//get the Catagory's list
currentCatagory.listOfItems = l.concat(e);//and add e
}
}
listdata=listdata.concat(currentCatagory);//add last catagory
//sets the list to show only catagories
var inner='';
for (i = 0; i < listdata.length; i++) {
inner+=parseOp(listdata[i].this);
}
list.innerHTML=inner;
}
function update(){
//check to make sure everything is loaded
if(typeof list=='undefined'){
load();
}
var inner='';//the new options
var value=list.options[list.selectedIndex].innerHTML;
if(value==currentvalue) return;
if(value.startsWith('-')){//if catagory
if(value.startsWith('--')){//if not -Select-
for (i = 0; i < listdata.length; i++) {//for all catagories
if(value==listdata[i].this){//if it is the current selected catagory then...
currentCatagory=listdata[i];//update the currentCatagory object
inner+=parseOp(listdata[i].this);//parse as option and append
//then append catagory's items
for(item in listdata[i].listOfItems){
inner+=parseOp(listdata[i].listOfItems[item]);
}
}else{//appends the other catagories
inner+=parseOp(listdata[i].this);
}
}
}else{//if it is '-select-' then just append the catagories
for (i = 0; i < listdata.length; i++) {
inner+=parseOp(listdata[i].this);
}
}
//set the new options
list.innerHTML=inner;
}
}
function parseOp(str){
//parse the options
return '<option value="">'+str+'</option>';
}
&#13;
<select name="List" id="List" onchange="update();">
<option value="">-Select-</option>
<option value="">--Product--</option>
<option value="">product1</option>
<option value="">product2</option>
<option value="">product3</option>
<option value="">--Software--</option>
<option value="">software1</option>
<option value="">software2</option>
<option value="">software3</option>
<option value="">--Services--</option>
<option value="">service1</option>
<option value="">service2</option>
<option value="">service3</option>
</select>
&#13;
要设置下拉框,您必须运行load()
否则只会在第一次更改事件发生后调用load()
。