2016-09-12 4 views
0

Я пытаюсь преобразовать функцию JQUERY в JavaScript. Я не уверен, что я делаю неправильно. Значения, возвращаемые, когда я переписал функцию в JS, возвращают 0.0.Преобразование функции JQUERY в родной JavaScript

Вот код JQuery Я хотел, чтобы преобразовать в чистом JavaScript:

$('#tableID > tbody > tr > td:nth-child(' + starter + ')').each(function() { 
    getAverage('#tableID > tbody > tr > td:nth-child(' + starter + ')', 'subTotal'); 
}) 

В основном я хочу, чтобы удалить .each() и использовать родной JavaScript вместо ...

Вот полный код:

var el1 = $('#tableID > thead > tr > th:gt(17):not(.totalRow)'); 
var x = el1.length; 
var starter = 19; 
for (i = 0; i < x; i++) { 
    $('#tableID > tbody > tr > td:nth-child(' + starter + ')').each(function() { 
     getAverage('#tableID > tbody > tr > td:nth-child(' + starter + ')', 'subTotal'); 
    }) 
    starter += 1; 
} 

Вот функция getAverage, чтобы помочь понять, что происходит:

//average function 
function getAverage(a, b) { 
    var $this, $content, tdTxt, theAvg; 
    var sum = 0; 
    var count = 0; 
    $(a).each(function() { 
     $this = $(this); // cache $(this) 
     $content = $this.html(); 
     tdTxt = parseFloat($this.text(), 10) || 0; 
     if ($this.hasClass(b)) { 
      theAvg = parseFloat((sum/count), 10) || 0; 
      $this.text((theAvg).toFixed(2)); 
      sum = 0; 
      count = 0; 
     } else { 
      sum += parseFloat(tdTxt); 
      if ($content == '') { 
      } 
      else { 
       ++count; // this micro-optimization makes it marginally faster 
      } 
     } 
    }) 
} 
+3

Вы не можете использовать $. ('Тег') искателя в Javascript .. Это функция JQuery –

+0

* Почему * Вы хотите, чтобы не использовать JQuery? Тем более, что '$()' является конструктором jquery? –

+1

Вы хотите использовать [querySelector] (https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector), установленный в '$ (selector)'. – jtrumbull

ответ

1

ESNext код

Array.from(
    document 
    .querySelectorAll('#tableID > tbody > tr > td:nth-child(' + starter + ')') 
).forEach(_=> getAverage(
    '#tableID > tbody > tr > td:nth-child(' + starter + ')', 
    'subTotal' 
)) 
+1

Можете что «Array.from» не поддерживается во всех браузерах. –

+0

'[] .forEach.call (селекторный материал, функция)' - более широко поддерживается - хотя имеется полипол для Array.from [здесь] (https://developer.mozilla.org/en/docs/Web/ JavaScript/Reference/Global_Objects/Array/from) ... и по другой руке код в этом ответе ES6 в любом случае ... так ... –

+0

Есть ли какой-нибудь серьезный программист, который не переводит JavaScript из текущей спецификации ECMAScript ? – marzelin

Смежные вопросы