Обнаружение $ (this) parent [duplicate]

В то время как , что вызывает NullReferenceExceptions и подходит к avoid / fix , такое исключение было рассмотрено в других ответах, что многие программисты не имеют " t узнал еще, как независимо отлаживать такие исключения во время разработки.

В Visual Studio это обычно легко благодаря Visual Studio Debugger .


Во-первых, убедитесь, что правильная ошибка будет обнаружена - см. . Как разрешить нарушение «Исключение System.NullReferenceException» в VS2010? Примечание1

Затем либо Начать с отладки (F5) , либо Приложить [отладчик VS] к запуску процесса . Иногда может быть полезно использовать Debugger.Break , в котором будет предложено запустить отладчик.

Теперь, когда NullReferenceException выбрано (или необработанно), отладчик остановится ( помните правило, указанное выше?) в строке, на которой произошло исключение. Иногда ошибка может быть легко обнаружена.

Например, в следующей строке единственный код, который может , вызывает исключение, если myString имеет значение null. Это можно проверить, посмотрев окно Watch или выполнив выражения в окне Immediate Window .

var x = myString.Trim();

В более сложных случаях, таких как следуя ниже, вам нужно будет использовать один из методов выше (Watch или Immediate Windows) для проверки выражений, чтобы определить, было ли str1 пустым или если str2 имеет значение null.

var x = str1.Trim() + str2.Trim();

Once , где было выбрано исключение, это обычно тривиально по отношению к разуму назад, чтобы выяснить, где введенное значение null было [неправильно] -

. Найдите время, необходимое для понимания причина исключения. Проверьте нулевые выражения. Проверьте предыдущие выражения, которые могли бы привести к таким нулевым выражениям. Добавьте контрольные точки и, по мере необходимости, пройдите через программу. Используйте отладчик.


1 Если Break on Throws слишком агрессивен и отладчик останавливается на NPE в библиотеке .NET или сторонних разработчиков, Break на User-Unhandled можно использовать для ограничения выловленных исключений. Кроме того, VS2012 представляет Just My Code , который я рекомендую также включить.

Если вы отлаживаете с включенным Just My Code, поведение немного отличается. При включенном Just My Code отладчик игнорирует исключения, связанные с привилегиями обычного языка (CLR) первого шанса, которые выходят за пределы My Code и не проходят через My Code

29
задан John Hartsock 7 July 2010 в 17:04
поделиться

7 ответов

Вот что вы имеете в виду:

var menuItem49 = $('#menu-item-49');
if (menuItem49.hasClass('current-menu-item') || menuItem49.hasClass('current-menu-parent')) {
    // ...
}
0
ответ дан BalusC 27 August 2018 в 00:51
поделиться
  • 1
    да, вот оно! спасибо плохо проверить ваш ответ немного ... – nwindham 7 July 2010 в 17:07

Вместо этого вы можете использовать is ?

if ($('#menu-item-49').is('.current-menu-item, .current-menu-parent')) {
  $('ul.sub-menu ').css('display', 'block');
}

Проверить текущий согласованный набор элементов на селектор и вернуть true, если хотя бы один из них Элементы соответствуют селектору.

Убивает необходимость использования нескольких hasClass запросов, что является альтернативой:

if ($('#menu-item-49').hasClass('current-menu-item') || 
    $('#menu-item-49').hasClass('current-menu-parent')) {
  $('ul.sub-menu ').css('display', 'block');
}
65
ответ дан GenericTypeTea 27 August 2018 в 00:51
поделиться

Так близко!

Попробуйте:

if ($('#menu-item-49').hasClass('current-menu-item') || $('#menu-item-49').hasClass('current-menu-parent') ) {
  $('ul.sub-menu ').css('display', 'block'); 
}
0
ответ дан HurnsMobile 27 August 2018 в 00:51
поделиться

Вы также можете использовать .is() для проверки любого класса, начинающегося с current-menu-, с помощью:

if ( $('#menu-item-49').is('[class]^="current-menu-"') ) {
    //49 is the current menu!
}

Здесь могут быть найдены [сериализаторы], такие как ^= здесь .

1
ответ дан jasongetsdown 27 August 2018 в 00:51
поделиться
  • 1
    В этом фрагменте есть проблема с синтаксисом. Это должно быть: if ($ ('# menu-item-49'). Is ('[class ^ = "current-menu- & quot;]')) {// 49 - это текущее меню! } – Jannik Müller 26 October 2016 в 15:42

Сделайте это как это, разделив его на два бита:

if ($('#menu-item-49').hasClass('current-menu-item') || $('#menu-item-49').hasClass('current-menu-parent') ){
   $('ul.sub-menu ').css('display', 'block');
}

Надеюсь, это поможет вам

0
ответ дан Marcos Placona 27 August 2018 в 00:51
поделиться
if ($('#menu-item-49').hasClass('current-menu-item') || $('#menu-item-49').hasClass('current-menu-parent') ) {
  $('ul.sub-menu ').css('display', 'block');
}

Вы пробовали следующее?

1
ответ дан Trefex 27 August 2018 в 00:51
поделиться

Вы не можете использовать оператор || (или) в пределах hasClass. Попробуйте это:

if ($('#menu-item-49').hasClass('current-menu-item') || 
    $('#menu-item-49').hasClass('current-menu-parent')) {
  $('ul.sub-menu ').css('display', 'block');
}

Или вы можете сделать это, если это слишком многословно:

var $menuItem = $('#menu-item-49');
if ($menuItem.hasClass('current-menu-item') || 
    $menuItem.hasClass('current-menu-parent')) {
  $('ul.sub-menu ').css('display', 'block');
}

Или еще лучше:

var $menuItem = $('#menu-item-49');
if ($menuItem.is('.current-menu-item, .current-menu-parent')) {
  $('ul.sub-menu ').css('display', 'block');
}
2
ответ дан Vivin Paliath 27 August 2018 в 00:51
поделиться
  • 1
    В вашей последней версии не должно быть запятая внутри кавычек? '.current-menu-item,.current-menu-parent' Я уверен, что is() принимает только 1 аргумент, но другой ответ с этим решением сделал то же самое, поэтому теперь я начинаю сомневаться в себе. : О) – user113716 7 July 2010 в 20:35
  • 2
    О, мой плохой. Ты прав! Это исправит. – Vivin Paliath 7 July 2010 в 20:40
Другие вопросы по тегам:

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