Выберите уникальный XElements (атрибутом) с использованием фильтра LinqToXml

Это не работает, потому что у вас есть два обработчика событий onclick, зарегистрированных на вложенных элементах.

Когда вы щелкаете по внутреннему элементу, чтобы закрыть меню, функция closeNav действительно вызывается правильно, но затем событие click распространяется в дереве DOM, достигая родительского идентификатора с идентификатором «mySidenav».

Теперь у div также есть зарегистрированный обработчик onclick, который также запускается, поэтому также вызывается ваша функция openNav.

Вы должны предотвратить распространение события вверх и достичь div, поэтому вы можете использовать event.stopPropagation ().

Проверьте это:

function openNav() {
  document.getElementById("mySidenav").style.width = "250px";
}

function closeNav(event) {
  event.stopPropagation();
  document.getElementById("mySidenav").style.width = "0";
}
body {
  font-family: "Lato", sans-serif;
}

.sidenav {
  height: 100%;
  width: 15px;
  position: fixed;
  z-index: 1;
  top: 0;
  left: 0;
  background-color: #111;
  overflow-x: hidden;
  transition: 0.5s;
  padding-top: 60px;
}

.sidenav a {
  padding: 8px 8px 8px 32px;
  text-decoration: none;
  font-size: 25px;
  color: #818181;
  display: block;
  transition: 0.3s;
}

.sidenav a:hover {
  color: #f1f1f1;
}

.sidenav .closebtn {
  position: absolute;
  top: 0;
  right: 25px;
  font-size: 36px;
  margin-left: 50px;
}

@media screen and (max-height: 450px) {
  .sidenav {
    padding-top: 15px;
  }
  .sidenav a {
    font-size: 18px;
  }
}



Animated Sidenav

Я бы порекомендовал вам прочитать больше о событии здесь: https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events

7
задан AnthonyWJones 5 December 2008 в 21:13
поделиться

3 ответа

Предположение фрагмента находится в itemsElement:

var distinctOwners = (from item in itemsElement.Element("item") 
 where itemElements.Attribute("cat") == 1 
select item.Attribute("owner")).Distinct();

Извинения за форматирование и добавление отступа!

15
ответ дан 6 December 2019 в 11:53
поделиться

Попробуйте эту функцию:-

static IEnumerable<int> GetOwners(XDocument doc, string cat)
{
    return from item in doc.Descendants("item")
        where item.Attribute("cat").Value == cat
        select (int)item.Attribute("owner")).Distinct();

}
2
ответ дан 6 December 2019 в 11:53
поделиться
  XElement ele = XElement.Parse(@"<items><item cat=""1"" owner=""14"">bla</item><item cat=""1"" owner=""9"">bla</item>" +
                                @"<item cat=""1"" owner=""14"">bla</item><item cat=""2"" owner=""12"">bla</item>" +
                                @"<item cat=""2"" owner=""12"">bla</item></items>");

  int cat = 1;


  List<int> owners = ele.Elements("item")
    .Where(x=>x.Attribute("cat").Value==cat.ToString()).Select(x=>Convert.ToInt32(x.Attribute("owner").Value)).Distinct().ToList();
0
ответ дан 6 December 2019 в 11:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: