Короткие и простые: поскольку элементы, которые вы ищете, не существуют в документе (пока).
В оставшуюся часть этого ответа я буду использовать getElementById
как пример, но то же самое относится к getElementsByTagName
, querySelector
и любому другому методу DOM, который выбирает элементы.
Возможные причины
Есть две причины, по которым элемент может не существовать:
getElementById
, действительно соответствует идентификатору существующего элемента в (сгенерированном) HTML и что у вас не было с ошибкой идентификатор (идентификаторы чувствительный !). Кстати, в большинстве современных браузеров , которые реализуют методы querySelector()
и querySelectorAll()
, нотация стиля CSS используется для извлечения элемента его id
, например: document.querySelector('#elementID')
, в отличие от способа, с помощью которого элемент извлекается его id
в [[16]; в первом символе #
необходимо, во втором это приведет к тому, что элемент не будет извлечен. getElementById
]. Последний случай довольно распространен. Браузеры анализируют и обрабатывают HTML сверху вниз. Это означает, что любой вызов элемента DOM, который встречается до появления этого элемента DOM в HTML, не будет выполнен.
Рассмотрим следующий пример:
Появляется div
после script
. В настоящий момент сценарий выполняется, элемент не существует , но и getElementById
вернут null
.
jQuery
То же самое относится к все селекторы с jQuery. jQuery не найдет элементов, если вы ошибочно написали ваш селектор, или вы пытаетесь выбрать их , прежде чем они на самом деле существуют .
Добавленный поворот - это когда jQuery не найден потому, что вы загрузили скрипт без протокола и запускаетесь из файловой системы:
этот синтаксис используется, чтобы позволить сценарию загружаться через HTTPS на странице с протоколом https: // и для загрузки HTTP-версии на странице с протоколом http: //
У этого есть неудачный побочный эффект попытки и невозможность загрузить file://somecdn.somewhere.com...
Решения
Прежде чем позвонить getElementById
(или любой метод DOM, если на то пошло), убедитесь, что элементы, к которым вы хотите получить доступ, существуют, т. е. загружается DOM.
Это может быть обеспечено просто добавив ваш JavaScript после к соответствующему элементу DOM
, и в этом случае вы также можете поместить код непосредственно перед тегом закрывающего тела (
) (все DOM элементы будут доступны в момент выполнения скрипта). [/ g3 6]
Другие решения включают прослушивание событий load
[MDN] или DOMContentLoaded
[MDN] . В этих случаях не имеет значения, где в документе вы помещаете код JavaScript, вам просто нужно запомнить, чтобы весь обработчик DOM обрабатывался в обработчиках событий.
Пример:
window.onload = function() {
// process DOM elements here
};
// or
// does not work IE 8 and below
document.addEventListener('DOMContentLoaded', function() {
// process DOM elements here
});
Более подробную информацию об обработке событий и различиях браузера см. в статьях на странице quirksmode.org .
jQuery
Сначала убедитесь, что jQuery загружен правильно , Используйте инструменты разработчика браузера , чтобы узнать, был ли найден файл jQuery и исправлен ли URL-адрес, если он не был (например, добавьте схему http:
или https:
в начале, отрегулируйте путь, и т. д.)
Прослушивание событий load
/ DOMContentLoaded
- это именно то, что делает jQuery с .ready()
[docs] . Весь ваш код jQuery, который влияет на элемент DOM, должен находиться внутри этого обработчика событий.
На самом деле в учебнике j8uery явно указано: Как почти все, что мы делаем при использовании jQuery, читает или манипулирует объектной моделью документа (DOM), мы должны убедиться, что мы начинаем добавлять события и т. д., как только DOM готов. Для этого мы регистрируем готовое событие для документа. В качестве альтернативы вы также можете использовать сокращенный синтаксис: Оба эквивалентны.
$(document).ready(function() {
// do stuff when DOM is ready
});
$(function() {
// do stuff when DOM is ready
});
break
оставляет петлю, continue
переходит к следующей итерации.
continue
пропускает текущий цикл выполнения и ПЕРЕМЕЩАЕТСЯ к следующему циклу, тогда как break
ПЕРЕМЕЩАЕТСЯ из цикла и выполняет следующий оператор после цикла. Я узнал разницу, используя следующий код. Проверьте различные выходные данные. Надеемся, что это поможет.
public static void main(String[] args) {
for(int i = 0; i < 5; i++){
if (i == 3) {
continue;
}
System.out.print(i);
}
}//prints out 0124, continue moves to the next iteration skipping printing 3
public static void main(String[] args) {
for(int i = 0; i < 5; i++){
if (i == 3) {
break;
}
System.out.print(i);
}
}//prints out 012, break moves out of the loop hence doesnt print 3 and 4
См. Ветвительные выражения для более подробной информации и примеров кода:
break
Оператор break имеет две формы: помечены и немечены , Вы видели немеченную форму в предыдущем обсуждении оператора switch. Вы также можете использовать немаркированный разрыв для завершения цикла while, while или do-while [...]
Инструкция о немедленной отмене прерывает самый внутренний переключатель, for, while или do-while, но помеченный разрыв прерывает внешний оператор.
blockquote>
continue
Оператор continue пропускает текущую итерацию для for, while или do-while петля. Незамеченная форма пропускается до конца тела самого внутреннего цикла и оценивает логическое выражение, которое управляет циклом. [...]
Обозначенный оператор continue пропускает текущую итерацию внешнего цикла, помеченного данной меткой.
blockquote>
Отличный ответ простой и точный.
Я бы добавил образец кода.
C:\oreyes\samples\java\breakcontinue>type BreakContinue.java
class BreakContinue {
public static void main( String [] args ) {
for( int i = 0 ; i < 10 ; i++ ) {
if( i % 2 == 0) { // if pair, will jump
continue; // don't go to "System.out.print" below.
}
System.out.println("The number is " + i );
if( i == 7 ) {
break; // will end the execution, 8,9 wont be processed
}
}
}
}
C:\oreyes\samples\java\breakcontinue>java BreakContinue
The number is 1
The number is 3
The number is 5
The number is 7
Break полностью покидает цикл и выполняет инструкции после цикла. Если Continue покидает текущую итерацию и выполняется со следующим значением в цикле.
Этот код объясняет все:
blockquote>public static void main(String[] args) { for(int i=0;i<10;i++) { if (i==4) { break; } System.out.print(i+"\t"); } System.out.println(); for(int i=0;i<10;i++) { if (i==4) { continue; } System.out.print(i+"\t"); } }
Выход:
0 1 2 3 0 1 2 3 5 6 7 8 9
Проще говоря: break прекратит текущий цикл и продолжит выполнение в первой строке после окончания цикла. continue переходит в состояние цикла и продолжает выполнение цикла.
Заявление о переходе
Иногда необходимо, чтобы выходил из цикла , прежде чем цикл завершил полностью итерацию по всем значениям шага. Например, перебирайте список чисел, пока не найдете число, удовлетворяющее определенному условию. Или зацикливание потока символов из файла, пока не будет прочитан определенный символ.
В следующем примере мы используем простой цикл для печати значений от 0 до 9:
for(int i=0; i<10; i++) {
System.out.println(i);
}
Выход:
0
1
2
3
4
5
6
7
8
9
Теперь, если мы добавим оператор break при i == 4, наш код выйдет из цикла после того, как i будет равен 4. Вы можете использовать оператор break выходить из цикла for, а петли и циклы do-while. Оператор break выйдет из текущего цикла. Чтобы вырваться из внешнего цикла из вложенного внутреннего цикла, вам нужно будет использовать метки с инструкцией break.
for(int i=0; i<10; i++) {
System.out.println(i);
if(i==4) {
break;
}
}
Выход:
0
1
2
3
4
Продолжить заявление
Инструкция Java continue пропускает текущую итерацию цикла и переходит непосредственно к следующей итерации. После вызова инструкции continue в цикле for выполнение цикла будет выполнять значение шага и оценивать логическое условие перед продолжением следующей итерации. В следующем примере мы печатаем все значения от 0 до 9 в цикле, но мы пропускаем распечатку 4.
for(int i=0; i<10; i++) {
if(i==4) {
continue;
}
System.out.println(i);
}
Выход:
0
1
2
3
5 <---- SKIPPED OVER 4 and continued with next loop iteration
6
7
8
9
Loop Обозначение ярлыка Вы можете использовать метки внутри вложенных циклов , указав, где вы хотите продолжить выполнение после выхода из внутреннего цикла. Обычно оператор break вырывается из самого внутреннего цикла, поэтому, когда вы хотите выйти из внешнего цикла, вы можете использовать метки для выполнения этого, по существу делая что-то похожее на инструкцию goto.
в следующем примере используются 3 петли, все вложенные друг в друга. Поскольку полностью не вырваться из внешнего цикла больше внутри внутреннего цикла, мы можем использовать метку «outer1», чтобы выполнить это, и указать метку рядом с оператором break.
outer1:
for(int i=0; i<5; i++) {
for(int j=0; j<4; j++) {
for(int k=0; k<2; k++) {
System.out.println("[" + i + "][" + j + "][" + k + "]");
if(j == 3) {
break outer1;
}
}
}
}
Выход:
[0][0][0]
[0][0][1]
[0][1][0]
[0][1][1]
[0][2][0]
[0][2][1]
[0][3][0]
Обратите внимание, как отображается последняя строка: « 0 [0]», где находится j == 3, и здесь мы называем «break outer1;»
Ярлыки цикла - Продолжить утверждение
Вы также можете использовать метки с ключевым словом continue, чтобы продолжить цикл из определенной точки. Взяв предыдущий пример и просто изменив одну строку, чтобы указать continue outer1;
вместо break outer1;
, цикл будет продолжать цикл с метки outer1
вместо выхода из цикла. Обратите внимание, как каждый раз вызывается continue outer1;
, код продолжается из внешнего цикла после увеличения индекса цикла i на 1.
outer1:
for(int i=0; i<5; i++) {
for(int j=0; j<4; j++) {
for(int k=0; k<2; k++) {
System.out.println("[" + i + "][" + j + "][" + k + "]");
if(j == 3) {
continue outer1;
}
}
}
[0][0][0]
[0][0][1]
[0][1][0]
[0][1][1]
[0][2][0]
[0][2][1]
[0][3][0] <---- CONTINUE WITH LABEL CALLED HERE
[1][0][0] <---- CONTINUES FROM NEXT ITERATION OF OUTER LOOP
[1][0][1]
[1][1][0]
[1][1][1]
[1][2][0]
[1][2][1]
[1][3][0] <---- CONTINUE WITH LABEL CALLED HERE
[2][0][0] <---- CONTINUES FROM NEXT ITERATION OF OUTER LOOP
[2][0][1]
[2][1][0]
[2][1][1]
[2][2][0]
[2][2][1]
[2][3][0] <---- CONTINUE WITH LABEL CALLED HERE
[3][0][0] <---- CONTINUES FROM NEXT ITERATION OF OUTER LOOP
[3][0][1]
[3][1][0]
[3][1][1]
[3][2][0]
[3][2][1]
[3][3][0] <---- CONTINUE WITH LABEL CALLED HERE
[4][0][0] <---- CONTINUES FROM NEXT ITERATION OF OUTER LOOP
[4][0][1]
[4][1][0]
[4][1][1]
[4][2][0]
[4][2][1]
[4][3][0]
Источник: Циклы в Java - Руководство по Ultimate
Оператор break
выходит из цикла (следующий оператор, который должен быть выполнен, является первым после закрытия), а continue
запускает цикл на следующей итерации.
Оператор break
содержит текущую структуру управления циклом и перескакивает позади нее, в то время как continue
тоже выходит, но возвращается к условию цикла.
Рассмотрим следующее:
int n;
for(n = 0; n < 10; ++n) {
break;
}
System.out.println(n);
break заставляет цикл завершаться, а значение n равно 0.
int n;
for(n = 0; n < 10; ++n) {
continue;
}
System.out.println(n);
продолжает причины программный счетчик для возврата к первой строке цикла (условие проверяется, а значение n - приращение), а конечное значение n равно 10.
Он должен также следует отметить, что break только завершает выполнение цикла, в котором он находится:
int m;
for(m = 0; m < 5; ++m)
{
int n;
for(n = 0; n < 5; ++n) {
break;
}
System.out.println(n);
}
System.out.println(m);
Выведет что-то в действие
0
0
0
0
0
5
Продолжить Установку прекратить итерацию и запустить следующую итерацию Ex:
System.out.println("continue when i is 2:");
for (int i = 1; i <= 3; i++) {
if (i == 2) {
System.out.print("[continue]");
continue;
}
System.out.print("[i:" + i + "]");
}
и Break Statment остановить цикл или выйти из цикла
вот семантика разрыва:
int[] a = new int[] { 1, 3, 4, 6, 7, 9, 10 };
// find 9
for(int i = 0; i < a.Length; i++)
{
if (a[i] == 9)
goto goBreak;
Console.WriteLine(a[i].ToString());
}
goBreak:;
вот семантика продолжения:
int[] a = new int[] { 1, 3, 4, 6, 7, 9, 10 };
// skip all odds
for(int i = 0; i < a.Length; i++)
{
if (a[i] % 2 == 1)
goto goContinue;
Console.WriteLine(a[i].ToString());
goContinue:;
}
Чтобы предотвратить что-либо от выполнения, если условие выполнено, следует использовать continue и выйти из цикла, если условие выполнено, следует использовать разрыв.
Например, в приведенном ниже коде .
for(int i=0;i<5;i++){
if(i==3){
continue;
}
System.out.println(i);
}
Вышеприведенный код напечатает результат: 0 1 2 4
NOw рассмотрим этот код
for(int i=0;i<5;i++){
if(i==3){
break;
}
System.out.println(i);
}
Этот код напечатает 0 1 2
Это основное отличие в продолжении и разломе.
Простая программа для понимания разницы между продолжением и разрывом
Когда используется continue
public static void main(String[] args) {
System.out.println("HelloWorld");
for (int i = 0; i < 5; i++){
System.out.println("Start For loop i = " + i);
if(i==2){
System.out.println("Inside if Statement for i = "+i);
continue;
}
System.out.println("End For loop i = " + i);
}
System.out.println("Completely out of For loop");
}
OutPut:
HelloWorld
Start For loop i = 0
End For loop i = 0
Start For loop i = 1
End For loop i = 1
Start For loop i = 2
Inside if Statement for i = 2
Start For loop i = 3
End For loop i = 3
Start For loop i = 4
End For loop i = 4
Completely out of For loop
Когда используется break
public static void main(String[] args) {
System.out.println("HelloWorld");
for (int i = 0; i < 5; i++){
System.out.println("Start For loop i = " + i);
if(i==2){
System.out.println("Inside if Statement for i = "+i);
break;
}
System.out.println("End For loop i = " + i);
}
System.out.println("Completely out of For loop");
}
Output:
HelloWorld
Start For loop i = 0
End For loop i = 0
Start For loop i = 1
End For loop i = 1
Start For loop i = 2
Inside if Statement for i = 2
Completely out of For loop
for (int i = 1; i <= 3; i++) {
if (i == 2) {
continue;
}
System.out.print("[i:" + i + "]");
попробуйте этот код в netbeans, вы поймете разницу между break и continue
for (int i = 1; i <= 3; i++) {
if (i == 2) {
break;
}
System.out.print("[i:" + i + "]");
Во-первых, я думаю, вы должны знать, что есть два типа разрыва и продолжить в Java, которые помечены как break, немеченый разрыв, помечены как продолжены и немечены. Продолжайте, я буду говорить о различии между ними.
class BreakDemo {
public static void main(String[] args) {
int[] arrayOfInts =
{ 32, 87, 3, 589,
12, 1076, 2000,
8, 622, 127 };
int searchfor = 12;
int i;
boolean foundIt = false;
for (i = 0; i < arrayOfInts.length; i++) {
if (arrayOfInts[i] == searchfor) {
foundIt = true;
break;//this is an unlabeled break,an unlabeled break statement terminates the innermost switch,for,while,do-while statement.
}
}
if (foundIt) {
System.out.println("Found " + searchfor + " at index " + i);
} else {
System.out.println(searchfor + " not in the array");
}
}
Инструкция о немедленном разрыве завершает самый внутренний коммутатор, в то время как оператор do-while.
public class BreakWithLabelDemo {
public static void main(String[] args) {
search:
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
System.out.println(i + " - " + j);
if (j == 3)
break search;//this is an labeled break.To notice the lab which is search.
}
}
}
Обозначенный разрыв прерывает внешний оператор. Если вы javac и java это демо, вы получите:
0 - 0
0 - 1
0 - 2
0 - 3
class ContinueDemo {
public static void main(String[] args) {
String searchMe = "peter piper picked a " + "peck of pickled peppers";
int max = searchMe.length();
int numPs = 0;
for (int i = 0; i < max; i++) {
// interested only in p's
if (searchMe.charAt(i) != 'p')
continue;//this is an unlabeled continue.
// process p's
numPs++;
}
System.out.println("Found " + numPs + " p's in the string.");
}
Оператор nonabeled continue пропускает текущую итерацию инструкции for, while, do-while.
public class ContinueWithLabelDemo {
public static void main(String[] args) {
search:
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
System.out.println(i + " - " + j);
if (j == 3)
continue search;//this is an labeled continue.Notice the lab which is search
}
}
}
Обозначенное выражение continue пропускает текущую итерацию внешнего цикла, помеченного данной меткой, если вы javac и java демо, вы получите:
0 - 0
0 - 1
0 - 2
0 - 3
1 - 0
1 - 1
1 - 2
1 - 3
2 - 0
2 - 1
2 - 2
2 - 3
, если у вас есть какие-либо вопросы, вы можете увидеть учебник по Java этого : введите описание ссылки здесь
, поэтому вы находитесь внутри цикла for или while. Использование break; выведет вас за пределы цикла. Как и в, это закончится. Продолжать; скажет ей запустить следующую итерацию.
Нет смысла использовать continue в инструкции if, но break; Полезно. В переключателе ... случае, всегда используйте break; для завершения дела, поэтому он не выполняет другого случая.
if
не находится внутри цикла, и в этом случае есть много точек.
– user207421
26 November 2015 в 02:13
System.out.println ("starting loop:");
for (int n = 0; n < 7; ++n)
{
System.out.println ("in loop: " + n);
if (n == 2) {
continue;
}
System.out.println (" survived first guard");
if (n == 4) {
break;
}
System.out.println (" survived second guard");
// continue at head of loop
}
// break out of loop
System.out.println ("end of loop or exit via break");
Это приведет к следующему выходу:
starting loop:
in loop: 0
survived first guard
survived second guard
in loop: 1
survived first guard
survived second guard
in loop: 2
in loop: 3
survived first guard
survived second guard
in loop: 4
survived first guard
end of loop or exit via break
Вы можете пометить блок, а не только цикл for, а затем разбить / продолжить от вложенного блока до внешнего. В некоторых случаях это может быть полезно, но в целом вы попытаетесь избежать такого кода, за исключением того, что логика программы намного лучше понять, чем в следующем примере:
first:
for (int i = 0; i < 4; ++i)
{
second:
for (int j = 0; j < 4; ++j)
{
third:
for (int k = 0; k < 4; ++k)
{
System.out.println ("inner start: i+j+k " + (i + j + k));
if (i + j + k == 5)
continue third;
if (i + j + k == 7)
continue second;
if (i + j + k == 8)
break second;
if (i + j + k == 9)
break first;
System.out.println ("inner stop: i+j+k " + (i + j + k));
}
}
}
Поскольку это возможно , это не значит, что вы должны использовать его.
Если вы хотите запутать свой код забавным способом, вы не выбираете значащее имя, а http: и следуете ему с комментарием, который выглядит чуждо, как веб-адрес в исходном коде :
http://stackoverflow.com/questions/462373
for (int i = 0; i < 4; ++i)
{
if (i == 2)
break http;
Я думаю, это от Джошуа Блоха quizzle. :)
http://stackoverflow.com/questions/462373/
?
– Caelum
9 June 2015 в 18:10
Оператор break
приводит к завершению инструкции, к которой он применяется (switch
, for
, do
или while
).
Оператор continue
используется для завершения текущей итерации цикла и управления возвратом в оператор цикла.