2012-03-15 4 views
1

저는 jQuery 초보자입니다. 다음은 h1 요소를 첫 번째 단락 아래로 이동시키는 두 개의 코드 스 니펫입니다. 그들은 똑같은 일을합니다.jquery에서 코드를 사용하지 않으면 코드가 정상적으로 작동하는 이유는 무엇입니까?

$('p').eq(0).after(function() { 
return $(this).prev(); 
}); 

및 코드 연습이 바람직하다

$('p').eq(0).after($('h1')); 

? 왜?

미리 도움을 청하십시오.

편집 :

여기에 html이 있습니다.

<article> 
<h1>Post</h1> 
<p> 
    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 
    tempor incididunt ut labore et dolore magna aliqua. 
</p> 
<p> 
    <span class=co>Lorem ipsum dolor sit amet</span>, consectetur adipisicing elit, sed do eiusmod 
</p> 
<p> 
    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod 
    tempor incididunt ut labore et dolore magna aliqua. 
</p> 
</article> 
+1

Wheres는 처음에는 언뜻보기에 다른 것들을하는 것처럼 보입니다 ... – elclanrs

+0

나는 html을 추가했습니다.

제목

가 lorem ipsum의

첫 번째 코드 쿼리 p''전에 요소,이 정확한 경우 : – user1186742

+0

나는 당신의 HTML이 같은 추측'h1' 동안 두 번째 코드 쿼리 페이지 – moul

답변

1

첫 번째 코드 : 모두 p 요소를 선택하고 첫 번째 요소를 가져온 다음 콜백에서 요소를 반환합니다. 콜백시 this이 선택한 p을 참조합니다. 따라서 console.logp 요소를 반환합니다. return은 선택한 요소 앞에있는 요소를 반환합니다. p. 이 경우 선택한 p이 첫 번째 Lorem ipsum입니다. 그리고 이전 요소는 h1입니다. 그런 다음 h1이 반환되고 after()p 요소가 첨부됩니다.

두 번째 코드 :이 특정 경우에도 비슷하게 작동합니다. 하지만 조심해! 이 경우 모든 p 요소를 가져오고 필터링하여 첫 번째 코드 (첫 번째 코드와 같음)를 붙이면 after이 붙습니다. 모두 h1 요소입니다. 당신의 예제 HTML 코드에서 하나의 h1 엘레멘트 만 가지고 있다면 문제가되지 않을 것입니다. 하지만 둘 이상이 있다면 문제가 생길 것입니다!

+0

두 번째 코드 스 니펫을 사용하여 더 많은 h1 요소를 포함한다면 클래스 또는 ID를 포함하여 어떤 h1을 의미하는지 지정해야합니다. 이런 식으로하지 않는 이유는 무엇입니까? – user1186742

+0

예. 첫 번째 코드는 현재 원하는 것보다 좋습니다. 이전의'h1'을 얻고'p' 요소 뒤에 넣으면. http://jsfiddle.net/XzP7J/에서 모든'h1'이 다음'p' 요소 다음에 첨부 될 것입니다. –

+0

첫 번째 코드가 더 좋은 유일한 이유는 HTML이이 예제에서 구조화 된 방식 때문입니다. 첫 번째 p 앞에 올바른 h1이 있습니까? joakimdahlstrom이 아래의 다른 답변에서 지적했듯이 ('p') .eq (0) .after ($ ('h1.class'))와 같이 html과의 융통성이 향상되므로 장기적인 전략이 유용 할 수 있습니다. – user1186742

0

더 똑똑하고 짧으며 잘 보입니다. 두 번째 대안으로 갈 것입니다.

에 ..

$('p').eq(0).after(function() { 
    return $(this).prev(); 
}); 

기존 HTML의 구조가있는 상태를 유지하는 것을 의미 ..would. 두 번째 방법을 사용하면 첫 번째 단락과 h1 사이에 추가 할 수 있으며 여전히 작동합니다.

+0

에서 각각'h1' 요소 답변 해 주셔서 감사합니다. html 구조가 특히 첫 번째 예제와 동일하게 유지되어야하는 이유를 잘 모르겠다. 어느 코드 스 니펫의 경우, 더 많은 'p'요소를 추가하면 jquery의 기능이 동일 해집니다. 단순히 첫 번째 'p'요소를 찾은 다음 그 아래에 'h1'을 배치합니다. 내가 놓친 게 있니? – user1186742

+0

항상 h1 뒤에 p가 오면 괜찮습니다. 그러나 유형에 관계없이 이전 요소를 가져옵니다. 첫 번째 p와 h1 사이에 아무 것도없는 경우 해당 요소는 원하는 위치로 이동합니다. 두 번째 예제에서 "h1은 첫 번째 단락 뒤에 배치됩니다"라고 말하면 항상 그 사이에 어떤 요소가 있는지에 관계없이 항상 작동합니다. – joakimdahlstrom

+0

아, 알겠습니다.매우 감사합니다. – user1186742

관련 문제