简体   繁体   English

捕获UI元素值的最有效方法

[英]most efficient way of capturing the values of UI elements

I have a page that contains many columns, and I'm trying to get the values of each of the elements within each column. 我有一个包含许多列的页面,并且我试图获取每个列中每个元素的值。

HTML: HTML:

    <div class="columnCollection">
        <div class="column">
            Column Name :
            <input class="columnName" type="text" name="ColumnName">

            Types:
            <select class="types"></select>

            Params:
            <select class="parameteria"></select>
   </div>

And here's how I'm currently doing it, 这是我目前的做法,

        var name = $('.columnName').get(index); // get the column name object
        var nameValue = $(name).val(); // get the value of the object

        var dtype = $('.types').get(index); // get types object
        var dTypeValue = $(dataType).find(":selected").val(); // get value

        var param = $('.parameteria').get(index);  // get param object
        var paramValue = $(param).find(":selected").val(); // get value

This method seems hefty so I am exploring different ways of accomplishing this. 这种方法似乎很繁琐,所以我正在探索实现此目的的不同方法。

I tried something like this but it's not legal in jquery/javascript world 我尝试过类似的操作,但在jquery / javascript世界中不合法

var name = $('.columnName').get(index).val();

I'm not very good at jQuery but in Javascript I would do something like this. 我不太擅长jQuery,但是在Javascript中我会做类似的事情。 Maybe not the prettiest answer but still another way to do it. 也许不是最漂亮的答案,但还有另一种方法。 This only works of course if all columns always have the same structure. 当然,这仅在所有列始终具有相同结构的情况下才有效。

Keep in mind that this could really perform in a bad way if you have a huge amount of columns! 请记住,如果您有大量的列,这可能会以不好的方式执行!

//get all columns (in Javascript with document.querySelectorAll())
var allColumns = $('.column'); 

for (var i = 0; i < allColumns.length; i++) {
   allColumns[i].children[0].value //columnName
   allColumns[i].children[1].value //types
   allColumns[i].children[2].value //parameteria
}

You could make it easier on yourself and assign an additional, uniform class to each of the inputs and select boxes. 您可以使自己变得更轻松,并为每个输入和选择框分配一个额外的统一类。 Or you can keep what you have now but group the selectors. 或者,您可以保留现在的内容,但将选择器分组。 I'd recommend the former though. 我还是建议前者。

Whichever route you choose you want to make sure to use map() to capture their values, 无论您选择哪种路线,都要确保使用map()捕获其值,

One Uniform Class 一门统一班

 var values = $('.uniform-class').map(function(_, elem) { return elem.value; }).get(); console.log(values); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="columnCollection"> <div class="column"> Column Name : <input class="uniform-class columnName" type="text" name="ColumnName" value="value-one"> Types: <select class="uniform-class types"> <option value="value-two">value-two</option> </select> Params: <select class="uniform-class parameteria"> <option value="value-three">value-three</option> </select> </div> </div> 

Grouping the Selectors: 分组选择器:

 var values = $('.columnName, .types, .parameteria').map(function(_, elem) { return elem.value; }).get(); console.log(values); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="columnCollection"> <div class="column"> Column Name : <input class="columnName" type="text" name="ColumnName" value="value-one"> Types: <select class="types"> <option value="value-two">value-two</option> </select> Params: <select class="parameteria"> <option value="value-three">value-three</option> </select> </div> </div> 

One doesn't use jQuery because it is efficient, it is used to be simple and stable. 一个人不使用jQuery是因为它高效,简单且稳定。 But sure you can write less and more efficient ways of obtaining the same result in jQuery. 但是请确保您可以编写更少和更有效的方法来在jQuery中获得相同的结果。

The DOM lookups are relatively heavy. DOM查找相对繁重。

By reducing these lookups speed can be doubled: 通过减少这些查找,速度可以提高一倍:

var columns = $('.columnName');
var dataTypes = $('.types');
var params = $('.parameteria');

for(index=0; index < 4; index++) {
  var $column = $(columns[index]);
  var $dataType = $(dataTypes[index]);
  var $param = $(params[index]);

  var nameValue = $column.val();
  var dTypeValue = $dataType.val();
  var paramValue = $param.val();

  console.log(nameValue, dTypeValue, paramValue);
}

See for yourself 你自己看

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM