Получить идентификатор кликаемого элемента и использовать его как $ (это) - PullRequest
0 голосов
/ 18 сентября 2018

Мне нужно иметь возможность щелкнуть элемент, получить идентификатор этого элемента и использовать его в другой функции. Как я могу это сделать, поскольку он не работает с помощью $(this). Это то, что я до сих пор:

$("#pills-ficha").on("click", closePillsOnClick);

function closePillsOnClick() {
  var clickedId = $(this).attr("id");
  var clickedIdChild = $(this).html($(this).html().split("By:").join(""));

  if ($(clickedId).hasClass("active")) {
    $(clickedId).removeClass("active show");
    e.stopPropagation();
    $(clickedIdChild).removeClass("active show").css("display", "none");
  } else {
    $(clickedIdChild).css("display", "block");
    $(clickedIdChild).siblings().css("display", "none");
  }
}

/ * edit * /

Я добавлю разметку:

<div class="d-flex flex-nowrap align-items-center">
                        <ul id="examples" class="nav nav-pills justify-content-center justify-content-lg-start" role="tablist">
                            <span class="text-blue font-weight-medium">EJEMPLOS:</span>
                            <li class="nav-item dropdown">
                                <a class="nav-link dropdown-toggle" id="pills-ficha-tab" data-toggle="pill" href="#pills-ficha" role="tab" aria-controls="pills-ficha" aria-selected="false">Ficha</a>
                            </li>
                            <li class="nav-item dropdown">
                                <a class="nav-link dropdown-toggle" id="pills-candidato-tab" data-toggle="pill" href="#pills-candidato" role="tab" aria-controls="pills-candidato" aria-selected="false">Mail candidato</a>
                            </li>
                            <li class="nav-item dropdown">
                                <a class="nav-link dropdown-toggle" id="pills-empresa-tab" data-toggle="pill" href="#pills-empresa" role="tab" aria-controls="pills-empresa" aria-selected="false">Mail empresa</a>
                            </li>
                        </ul>
                    </div>  
                </div>
            </div>
            <div class="row">
                <div class="col-lg-8 offset-lg-2 text-center tab-content" id="pills-tabContent">
                  <div class="tab-pane fade" id="pills-ficha" role="tabpanel" aria-labelledby="pills-ficha-tab">
                    <img src="img/gold/gold-ejemplo-ficha.jpg" alt="Ejemplo de ficha">
                  </div>
                  <div class="tab-pane fade" id="pills-candidato" role="tabpanel" aria-labelledby="pills-candidato-tab">
                    <img src="img/gold/gold-ejemplo-candidato.jpg" alt="Ejemplo de mail al candidato">
                  </div>
                  <div class="tab-pane fade" id="pills-empresa" role="tabpanel" aria-labelledby="pills-empresa-tab">
                    <img src="img/gold/gold-ejemplo-empresa.jpg" alt="Ejemplo de mail a la empresa">
                  </div>
                </div>
            </div>

Ответы [ 3 ]

0 голосов
/ 18 сентября 2018

Основная проблема с вашей логикой заключается в том, что attr('id') возвращает вас обратно pills-ficha, что само по себе не является допустимым селектором.Вам нужно добавить к нему #, чтобы он заработал.

Однако это ошибочный подход.У вас уже есть ссылка на сам элемент через ключевое слово this.Создание ссылки на этот элемент, чтобы получить его id, чтобы затем получить еще одну ссылку на тот же элемент этим id, совершенно бессмысленно.

Таким образом, вы можете упростить логику следующим образом:

$("#pills-ficha").on("click", closePillsOnClick);

function closePillsOnClick() {
  var $clicked = $(this);
  var clickedIdChild = $clicked.html($clicked.html().split("By:").join(""));

  if ($clicked.hasClass("active")) {
    e.stopPropagation();
    $clicked.removeClass("active show");
    $(clickedIdChild).removeClass("active show").hide();
  } else {
    $(clickedIdChild).show().siblings().hide()
  }
}

Вероятно, вы можете сделать то же самое со ссылкой clickedIdChild, но ваш HTML не показывает достаточно информации, чтобы я мог дать вам пример того, как это исправить.

0 голосов
/ 18 сентября 2018

Проблема с моим первоначальным вопросом заключалась в следующем:

var clickedIdChild = $(this).html($(this).html().split("By:").join(""));

Это должно было быть:

var clickedIdChild = clickedId.split(":By").join("");

Также добавлено:

$ ("#"+ clickedIdChild) в качестве селектора.

Тогда это работает как ожидалось:

function closePillsOnClick(e){

    var clickedId = $(this).attr("id");
    var clickedIdChild = clickedId.split("-tab").join("");

    if( $(this).hasClass("active") ){
        $(this).removeClass("active show");
      e.stopPropagation();
        $("#"+clickedIdChild).removeClass("active show").css("display", "none");  

    } else {
        $("#"+clickedIdChild).css("display", "block"); 
        $("#"+clickedIdChild).siblings().css("display", "none");
    }
  };
0 голосов
/ 18 сентября 2018

ОК, давайте уточним это.var clickedId = $(this).attr("id"); вернет ID в форме fakeId.Далее у вас есть jQuery с идентификатором ($(clickedId)), который в моем примере будет $('fakeId').Селектор идентификатора должен начинаться с #, поэтому вы должны добавить его.Таким образом, действительный код будет $('#' + clickedId).Больше здесь:

Приветствия.

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