Создайте систему вкладок с атрибутом данных html и jquery на основе значения данных. - PullRequest
0 голосов
/ 03 декабря 2018

Я совершенствую свои навыки работы с jquery.

Вот моя проблема:

Я создаю систему вкладок с помощью jquery, и в своем HTML я добавил атрибут dataв мой список заказов и на мою вкладку выбрано:

let tabHeader = $('.x-nav-tabs-item');
let tabContent = $('.x-tab-pane');
let attributevalue = tabContent.attr('data-cs-tab-index');

tabHeader.click(function() {
  tabHeader.removeClass('active');
  $(this).addClass('active');
  let match1 = $('.active a').attr('data-cs-tab-toggle');
  tabContent.removeClass('active');
  console.log(match1);

  tabContent.attr('data-cs-tab-index').val(match1).addClass(active);
});
<ul class="x-nav" data-x-element="tab_nav" data-x-params="orientation-horizontal">
	<li class="x-nav-tabs-item">
		<a data-cs-tab-toggle="1">For High school graduates (under 19 yrs):</a>
	</li>
	<li class="x-nav-tabs-item active">
		<a data-cs-tab-toggle="2">For Mature Students (19 years+):</a>
	</li>
	<li class="x-nav-tabs-item">
		<a data-cs-tab-toggle="3">For LPNs applying for the RDPN Access program:</a>
	</li>
</ul>


<div class="x-tab-content">
	<div class="x-tab-pane" data-cs-tab-index="1">
		<ul>
			<li>Graduation from Grade 12 with a C+ average</li>
			<li>Grade 12 English (minimum grade B)*</li>
			<li>Grade 12 Biology (minimum grade C)</li>
			<li>Grade 11 Math (Foundations, Principles or Precalculus – minimum grade C)</li>
			<li>Grade 10 Science (minimum grade C)</li>
		</ul>
	</div>
	<div class="x-tab-pane" data-cs-tab-index="2">
		<ul>
			<li>Grade 12 English (minimum grade B)*</li>
			<li>Grade 12 Biology (minimum grade C)</li>
			<li>Grade 11 Math (Foundations, Principles or Precaculus – minimum grade C)</li>
		</ul>
	</div>
	<div class="x-tab-pane" data-cs-tab-index="3">
		<ul>
			<li>Copy of Licensing as Practical Nurse</li>
			<li>Proof of the equivalent of 2 years (3600 hours) full-time Work Experience as an LPN</li>
		</ul>
	</div>
</div>

Это может быть одна идея о том, как решить проблему.Конечно, это не работает, я думаю о функции data () для извлечения значения другим подходом, например:

tabContent.each(function() {
  let value = $(this).data('cs-tab-index');
  console.log(value);
  if (value == match1) {
    $(this).addClass("active");
  }
});

Или сценарий, подобный:

tabContent.removeClass('active');
tabContent.data('cs-tab-index').val(1).addClass('active');

Они оба не работают.

Любое предложение или кто-то, кто мог бы указать, где моя ошибка?

Ответы [ 3 ]

0 голосов
/ 03 декабря 2018

Ты не далеко.Эта строка:

 tabContent.attr('data-cs-tab-index').val(match1).addClass(active);

немного запутана и должна быть:

 tabContent.filter('[data-cs-tab-index=' + match1 + ']').addClass("active");  

, которая находится в пределах tabContent узла, который имеет data-cs-tab-index соответствия match1.Есть и другие способы сделать это, например, использовать карту.

Не внося слишком много изменений в существующий код, вот обновленная версия:

let tabHeader = $('.x-nav-tabs-item');
let tabContent = $('.x-tab-pane');

tabHeader.click(function() {
  tabHeader.removeClass('active');
  $(this).addClass('active');
  
  //let match1 = $('.active a').data('cs-tab-toggle');
  let match1 = $(this).find("a").data('cs-tab-toggle');
  
  tabContent.removeClass('active');
  tabContent.filter('[data-cs-tab-index=' + match1 + ']').addClass("active");  
});
.x-tab-pane { display:none; }
.x-tab-pane.active {
    display:block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="x-nav" data-x-element="tab_nav" data-x-params="orientation-horizontal">
  <li class="x-nav-tabs-item">
    <a data-cs-tab-toggle="1">For High school graduates (under 19 yrs):</a>
  </li>
  <li class="x-nav-tabs-item active">
    <a data-cs-tab-toggle="2">For Mature Students (19 years+):</a>
  </li>
  <li class="x-nav-tabs-item">
    <a data-cs-tab-toggle="3">For LPNs applying for the RDPN Access program:</a>
  </li>
</ul>


<div class="x-tab-content">
  <div class="x-tab-pane" data-cs-tab-index="1">
    <ul>
      <li>Graduation from Grade 12 with a C+ average</li>
      <li>Grade 12 English (minimum grade B)*</li>
      <li>Grade 12 Biology (minimum grade C)</li>
      <li>Grade 11 Math (Foundations, Principles or Precalculus – minimum grade C)</li>
      <li>Grade 10 Science (minimum grade C)</li>
    </ul>
  </div>
  <div class="x-tab-pane" data-cs-tab-index="2">
    <ul>
      <li>Grade 12 English (minimum grade B)*</li>
      <li>Grade 12 Biology (minimum grade C)</li>
      <li>Grade 11 Math (Foundations, Principles or Precaculus – minimum grade C)</li>
    </ul>
  </div>
  <div class="x-tab-pane" data-cs-tab-index="3">
    <ul>
      <li>Copy of Licensing as Practical Nurse</li>
      <li>Proof of the equivalent of 2 years (3600 hours) full-time Work Experience as an LPN</li>
    </ul>
  </div>
</div>
0 голосов
/ 03 декабря 2018

Использование литералов шаблона :

let tabHeader = $('.x-nav-tabs-item');
let tabContent = $('.x-tab-pane');
let attributevalue = tabContent.attr('data-cs-tab-index');

tabHeader.click(function() {
  tabHeader.removeClass('active');
  tabContent.removeClass('active');
  $(this).addClass('active');
  let match1 = $('.active a').attr('data-cs-tab-toggle');

  $(`.x-tab-pane[data-cs-tab-index="${match1}"]`).toggleClass('active');
});
.active {
  background-color: red;
  display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="x-nav" data-x-element="tab_nav" data-x-params="orientation-horizontal">
  <li class="x-nav-tabs-item">
    <a data-cs-tab-toggle="1">For High school graduates (under 19 yrs):</a>
  </li>
  <li class="x-nav-tabs-item active">
    <a data-cs-tab-toggle="2">For Mature Students (19 years+):</a>
  </li>
  <li class="x-nav-tabs-item">
    <a data-cs-tab-toggle="3">For LPNs applying for the RDPN Access program:</a>
  </li>
</ul>


<div class="x-tab-content">
  <div class="x-tab-pane" data-cs-tab-index="1">
    <ul>
      <li>Graduation from Grade 12 with a C+ average</li>
      <li>Grade 12 English (minimum grade B)*</li>
      <li>Grade 12 Biology (minimum grade C)</li>
      <li>Grade 11 Math (Foundations, Principles or Precalculus – minimum grade C)</li>
      <li>Grade 10 Science (minimum grade C)</li>
    </ul>
  </div>
  <div class="x-tab-pane" data-cs-tab-index="2">
    <ul>
      <li>Grade 12 English (minimum grade B)*</li>
      <li>Grade 12 Biology (minimum grade C)</li>
      <li>Grade 11 Math (Foundations, Principles or Precaculus – minimum grade C)</li>
    </ul>
  </div>
  <div class="x-tab-pane" data-cs-tab-index="3">
    <ul>
      <li>Copy of Licensing as Practical Nurse</li>
      <li>Proof of the equivalent of 2 years (3600 hours) full-time Work Experience as an LPN</li>
    </ul>
  </div>
</div>
0 голосов
/ 03 декабря 2018

Все, что вам нужно сделать, это что-то вроде:

$('.x-nav a').on('click', function() {
    $('.x-tab-pane')
        .hide()
        .filter('[data-cs-tab-index=' + $(this).attr('data-cs-tab-toggle') + ']')
        .show();
});

И здесь - это демо

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