Могу ли я присвоить атрибут (или какой-нибудь эквивалент) переменной Javascript?Пример кода включен - PullRequest
0 голосов
/ 25 мая 2018

(Предисловие: мой код работает с JQuery)

У меня есть следующий код, который уменьшает дробь и затем отображает результат:

Это функция, которая упрощает дробь:

function reduce(numerator,denominator){
  var gcd = function gcd(a,b){
    return b ? gcd(b, a%b) : a;
  };
  gcd = gcd(numerator,denominator);
  if ((denominator/gcd) == 1) {
  return [numerator/gcd];
  } else {return [numerator/gcd +"|"+ denominator/gcd];
  }
}

Отображает результат - в данном случае 1|3 - когда диапазон в теле HTML имеет класс reducedfraction:

var reducedfraction = reduce(4,12);
$('.reducedfraction').html(reducedfraction );

Все вышеперечисленное работает просто отлично.
Вот модификация, которую я пытаюсь сделать:

Если дробь не может быть уменьшена (другими словами, gcd == 1), родительский диапазон с классом SimplificationPrompt исчезнет.

Я не верю, что вы можете добавить атрибут к переменной, но я все равно пытался, потому что не знал, что еще делать.Вот что я попробовал:

function reduce(numerator,denominator){
  var gcd = function gcd(a,b){
    return b ? gcd(b, a%b) : a;
  };
  gcd = gcd(numerator,denominator);
  if ((denominator/gcd) == 1) {
  return [numerator/gcd];
  } else {
return [numerator/gcd +"|"+ denominator/gcd];
if ((gcd == 1)){
     $(this).attr({  // THE IDEA HERE IS THAT A GCD OF 1 WOULD FLAG THIS IN SOME WAY (I JUST RANDOMLY CHOSE TITLE)
                "title" : "HideSimplificationPrompt"
            });
    }
      }
    }

$(document).ready(function () { //AND THEN THIS FUNCTION WOULD HIDE THE SPECIFIED PARENT SPAN 
$("[title=HideSimplificationPrompt]").parent(".SimplificationPrompt).hide();
});

Новичок здесь, пытаясь учиться с помощью таких экспериментов.Любая помощь приветствуется.Спасибо!

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Не смешивайте выходной код с вычислительным кодом.Используйте

function reduce(numerator, denominator) {
  function gcd(a,b) {
    return b ? gcd(b, a%b) : a;
  }
  var divisor = gcd(numerator, denominator);
  return {
    numerator: numerator/divisor,
    denominator: denominator/divisor,
    isSimplified: divisor == 1
  };
}

и

function display(element, {numerator, denominator}) {
  var out = numerator + "|" + denominator;
  if (denominator == 1) {
    out = String(numerator);
  }
  element.html(out);
}

, которые вы можете назвать как

var reducedfraction = reduce(4,12);
display($('.reducedfraction'), reducedfraction);

Должно быть легко ввести код, который изменяет атрибут title элементаесли reducedfraction.isSimplified истинно в правильном месте в функции display.

0 голосов
/ 25 мая 2018

Во-первых, вы не можете завершить любую логику ПОСЛЕ оператора возврата.Таким образом, все ваше состояние после return [numerator/gcd +"|"+ denominator/gcd]; бессмысленно. Вы должны завершить «скрытие» или «показ» вашего тега span до вас return.

Во-вторых, если я понимаю, чтовы пытаетесь сделать правильно, почему бы вам просто не условно hide() промежуток, еслиесть gcf 1?

то есть.

if(gcd === 1){
  $('.span-to-hide').hide();
}else{
  $('.span-to-hide').show();
}

Наконец, способ, которым вы возвращаете свой результат, отличается от всего, что я когда-либо видел.Не уверен, если вы делаете это по причине или нет ... но подумайте над пересмотром.

Редактировать Я признаю, что у меня небольшие проблемы с попыткой понять, что вы пытаетесь сделать, поэтому я перестану пытаться ответить на этот вопрос.Но я добавлю небольшой самородок, который может быть вам полезен в будущем ...

Если вы пытаетесь нацелиться на определенный элемент и у вас есть доступ к html,для вас почти всегда имеет смысл дать этому элементу id.id уникально по соглашению, поэтому нет причин пытаться нацеливаться на родителей ... или любой другой материалТочно нацеливайтесь на то, что вам нужно, структурируя ваш html таким способом, который будет наиболее простым для того, что вы пытаетесь сделать.Вы разработчик, вы на месте водителя.Не усложняйте свою работу.

Во-вторых , чтобы получить лучшее качество ответов на SO, вам следует структурировать свои вопросы немного более тщательно.Включите полные примеры, чтобы люди могли фактически выполнить ваш код или приблизиться к возможности повторить ваш сценарий.В любом случае, я надеюсь, что вы найдете свое решение раньше, чем позже.Продолжайте кодировать!Становится легче / тяжелее лол.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...