다음 요구 사항이 있다고 가정합니다. 요소가 존재하는 경우 "x"
요소가있는 요소에 e
요소를 추가하고, 그렇지 않으면 e
을 본문에 추가하십시오.다른 요소가 없으면 JQuery에서 요소를 선택하는 우아한 방법이 있습니까?
, 내가 쓸 수 있습니다 : jQuery를에
var parent = document.getElementById("x") || document.body;
parent.appendChild(e);
을, 다음을 수행 하지 일 :
var parent = $("#x") || $("body");
parent.append(e);
때문에 경우 ID x
이 존재 아무 요소하지, 분리 된 첫 번째 빈 jquery 객체를 반환합니다. 거짓이 아닌 진위가 있으므로 append
은 아무 작업도 수행하지 않습니다. 나는 그러나 작성할 수 있습니다
var parent = $("#x")[0] || $("body")[0];
parent.appendChild(e);
하지만 jQuery 오브젝트를 색인하는 HTMLElements 날 다시 얻을 수 있기 때문에이 솔루션은 다소 투박, 그래서 appendChild
대신 append
사용해야합니다. 이것이 작동하는 동안, 나는이 수준의 혼합이 적절하지 않거나 나쁜 설계를 나타낼 지 궁금합니다.
사용 방법이있을 수 있습니다. first()
? 아마도 첫 번째 요소가 id x 인 div이고 두 번째 요소가 본문 인 배열 인 jQuery 객체를 만들 수 있습니다. 요소 배열을 사용하는 jQuery 생성자 폼을 사용하여이 작업을 수행 할 수 있다는 것을 알았지 만, 다시 혼합 수준으로 돌아 왔습니다. 나는 또한 id x ($("#x").length
)를 가진 요소의 존재를 검사하는 방법을 안다.하지만 이것은 "id x가있는 요소라면, 그렇지 않으면 본문"이라는 문구를 우아한 방법으로 유도 할 수있는 방법을 알 수 없다.
그러한 제형은 존재합니까?
var parent = $('#x');
if(parent.length == 0) parent = $('body');
을 그리고 그 의도는 매우 분명하다
오, 이거 꽤예요. jQuery가 여기에서 아주 진지한 마법을 사용하지 않는 한, 단락 대신 첫 번째 요소를 반환하기 전에 모든 요소를 선택하는 성능상의 단점이 있습니다. 여전히 성능 수준에 관심이 있다면 처음부터 jQuery를 사용해서는 안됩니다. – Matchu
아니요, [ "반환 된 jQuery 객체의 DOM 요소 순서는 문서 순서대로되므로 동일하지 않을 수 있습니다."] (http://api.jquery.com/multiple- selector /) (예 : http://jsfiddle.net/ambiguous/edYY6/). 그러면 매번 '
'이 나옵니다. –매우 좋다고 생각합니다. 첫 번째 페이지에는 고유 한 ID가 있어야하고 두 번째 페이지는 고유 한 ID **가 ** the ** body 요소이므로 페이지의 첫 번째 페이지는 괜찮습니다. HTML 중 하나만 있어야합니다. –