Jquery 에서 요소를 존재를 어떻게 확인할 수 있습니까?
현재 보유하고 있는 코드를 로만스였나:
if ($(selector).length > 0) {
// Do something
}
이 방법은 보다 세련된 있나요? 아마도 a 플러그인에는 또는 함수?
구로췌!
jQuery.fn.exists = function(){ return this.length > 0; }
if ($(selector).exists()) {
// Do something
}
이는 이에 대해 다음과 같이 사용된다. [제프 애트우드 포드캐스트를 코드를 통해 것이다] [1]
[1]: http://herdingcode.com/? p = 36
사용할 경우
jQuery.fn.exists = function(){return ($(this).length > 0);}
if ($(selector).exists()) { }
그대는 체인식으로 연결 할 수 있다는 것을 의미한다) 는 아니다.
이 낫겠다.
jQuery.exists = function(selector) {return ($(selector).length > 0);}
if ($.exists(selector)) { }
[&Solarisdvd FAQ] 또는 1:
if ( $('#myDiv').length ) { /* Do something */ }
다음 사용할 수도 있습니다. 없으면 jQuery 객체가 array 의 값을 얻을 수 있는 첫 번째 항목에 어졌다면 어레이입니다 돌아갈 것이라고 정의되지 않았습니다.
if ( $('#myDiv')[0] ) { /* Do something */ }
가장 빠르고 의미 설명하는 방법을 사용하여 JavaScript '일반' 존재 자체 확인할지 실제로.
if (document.getElementById('element_id')) {
// Do something
}
조금만 더 이상 쓸 수 있지만, 이 때문에 빠른 길이 교체품 실행하므로 포함한다 () 는 js 메서드입니다.
또 다른 쓰는 것보다 더 나은 자신의 '' 기능을 포함한다. 느린 이유를 들어 있는 대안은 @snover 밝혔다. 하지만 이 또한 다른 프로그래머들이 인상을 줄 수 있는 '뭔가' () 는 고유의 기능을 포함한다. ',' 다른 사람이 이해할 수 없는 것이라고 하는 JavaScript 코드를 편집으로 / 지식 향상 된다.
"만약 이 플러그인을 사용할 수 있는 '기술서임을 like' if ($ (엘리) 그렉시스트 () {} '/ 일을 / 사용하거나 콜백하는.
;;(function($) {
if (!$.exist) {
$.extend({
exist: function() {
var ele, cbmExist, cbmNotExist;
if (arguments.length) {
for (x in arguments) {
switch (typeof arguments[x]) {
case 'function':
if (typeof cbmExist == "undefined") cbmExist = arguments[x];
else cbmNotExist = arguments[x];
break;
case 'object':
if (arguments[x] instanceof jQuery) ele = arguments[x];
else {
var obj = arguments[x];
for (y in obj) {
if (typeof obj[y] == 'function') {
if (typeof cbmExist == "undefined") cbmExist = obj[y];
else cbmNotExist = obj[y];
}
if (typeof obj[y] == 'object' && obj[y] instanceof jQuery) ele = obj[y];
if (typeof obj[y] == 'string') ele = $(obj[y]);
}
}
break;
case 'string':
ele = $(arguments[x]);
break;
}
}
}
if (typeof cbmExist == 'function') {
var exist = ele.length > 0 ? true : false;
if (exist) {
return ele.each(function(i) { cbmExist.apply(this, [exist, ele, i]); });
}
else if (typeof cbmNotExist == 'function') {
cbmNotExist.apply(ele, [exist, ele]);
return ele;
}
else {
if (ele.length <= 1) return ele.length > 0 ? true : false;
else return ele.length;
}
}
else {
if (ele.length <= 1) return ele.length > 0 ? true : false;
else return ele.length;
}
return false;
}
});
$.fn.extend({
exist: function() {
var args = [$(this)];
if (arguments.length) for (x in arguments) args.push(arguments[x]);
return $.exist.apply($, args);
}
});
}
})(jQuery);
[이스피들] (
/embedded/result,js,html,css/">하나 또는 두 개의 콜백 지정할 수 있습니다. 첫 번째 요소는 존재하는 경우, 두 번째 one 은 불지옥의 거역한다면 불지옥의 않을 경우 요소점 높여줍니까 존재합니다. 그러나 한 가지 기능만 전달할 때, 그렇지 않을 경우에는 미디어만을 불지옥의 요소점 존재합니다. 따라서 이 경우 선택한 요소점 높여줍니까 타임코드가 체인에서의 죽을 수 없습니다. 가 있을 경우, 첫 번째 기능은 물론, 화재 및 체인에서의 계속될 것이라고 밝혔다.
if ($.exist('#eleID')) { /* DO WORK */ } // param as STRING
if ($.exist($('#eleID'))) { /* DO WORK */ } // param as jQuery OBJECT
if ($('#eleID').exist()) { /* DO WORK */ } // enduced on jQuery OBJECT
$.exist('#eleID', function() { // param is STRING && CALLBACK METHOD
/* DO WORK */
/* This will ONLY fire if the element EXIST */
}, function() { // param is STRING && CALLBACK METHOD
/* DO WORK */
/* This will ONLY fire if the element DOES NOT EXIST */
})
$('#eleID').exist(function() { // enduced on jQuery OBJECT with CALLBACK METHOD
/* DO WORK */
/* This will ONLY fire if the element EXIST */
})
$.exist({ // param is OBJECT containing 2 key|value pairs: element = STRING, callback = METHOD
element: '#eleID',
callback: function() {
/* DO WORK */
/* This will ONLY fire if the element EXIST */
}
})
내가 보고 있는 것처럼, 그들은 대부분 정확하지 여기에 대답을 합니다 확인 할 수 있지만, 대부분의 경우 확인란 요소점 길이 얻게된다면 상상할 수 없는 경우, 함수에 대한 전달하십시오 100% 그래서 있는 모든 조건을 확인 후 답변 대신 프로토타입 기능 때문에 합니다.
$.fn.exists = $.fn.exists || function() {
return !!(this.length && (this[0] instanceof HTMLDocument || this[0] instanceof HTMLElement));
}
이 모두 확인할 길이 및 유형, 이제 이 방법을 살펴보자.
$(1980).exists(); //return false
$([1,2,3]).exists(); //return false
$({name: 'stackoverflow', url: 'http://www.stackoverflow.com'}).exists(); //return false
$([{nodeName: 'foo'}]).exists() // returns false
$('div').exists(); //return true
$('.header').exists(); //return true
$(document).exists(); //return true
$('body').exists(); //return true
if(document.getElementById("myElement")) {
//Do something...
}
jQuery 는 정말 멋진 # 39 분류될 수 있지만, 순수 JavaScript don& t let 오블리비언.
그 이유는 이전의 모든 답을 할 수 있는 이들은 대부분 's', '트렌크스 파라메트가 jquery& 사용하여 디스크입니다. diskid 크리스 엘리스랄라 선택기를 커튼 뒤에 # 39$ ()' (또는 사용하고 바로). 이 방법은 대답하도다 느린 필요가 있기 때문에 전체 DOM 진단트리는 분석할 수 있는 모든 찾고 있는 어레이에서는 저들이요 채우기 위해 일치시킵니다 선택기를 및
이 [# 39, & # 39 length&;] 파라메트가 필요 없거나 코드와 될 경우 직접 사용하는 것이 훨씬 빨리 도쿠망스케리셀레스 (선택기를) '대신' 첫 번째 요소를 찾을 수 없는 경우 또는 null 되돌려줍니다 일치시킵니다 있기 때문이다.
function elementIfExists(selector){ //named this way on purpose, see below
return document.querySelector(selector);
}
/* usage: */
var myelement = elementIfExists("#myid") || myfallbackelement;
그러나 이 방법은 실제 객체에는 반환되었습니다 찻입 가 우리에게 있다. # 39 로 저장할 수 있는 경우, 미세 isn& 어쩔 수 없는 변수 및 반복적으로 사용 (카타시안 상태로 우리가 잊고 수립하였습니다 참조).
var myel=elementIfExists("#myid");
// now we are using a reference to the element which will linger after removal
myel.getParentNode.removeChild(myel);
console.log(elementIfExists("#myid")); /* null */
console.log(myel); /* giant table lingering around detached from document */
myel=null; /* now it can be garbage collected */
경우에 따라 원하는 대로 될 수도 있습니다. For 루프는 이렇게 사용할 수 있습니다.
/* locally scoped myel gets garbage collected even with the break; */
for (var myel; myel = elementIfExist(sel); myel.getParentNode.removeChild(myel))
if (myel == myblacklistedel) break;
정작 필요한 경우, t want to get / 작성하든지 don& # 39 요소와 단순한 참 / 거짓, 그냥 연산뿐 아니야!! 그런데 왜 묶이지 않은 제공되는 작동하잖아 신발에 대한 세제곱인치 여기서요?
function elementExists(selector){
return !!document.querySelector(selector);
}
/* usage: */
var hastables = elementExists("table"); /* will be true or false */
if (hastables){
/* insert css style sheet for our pretty tables */
}
setTimeOut(function (){if (hastables && !elementExists("#mytablecss"))
alert("bad table layouts");},3000);
는 ['$ 스콘테인스 ()'] (http://api.jquery.com/jQuery.contains/) 그리웠댔지?
> 제크리스콘테인스 (컨테이너인 v2.03-00) ','
이 경우 () ',' $ 스콘테인스 > 되돌려줍니다 DOM element 의 인수가 하위 두 번째 방법을 제공하는 진정한 DOM element 모두인지 직접 제공한 첫 번째 인수, 하위 또는 네스트된 더욱 깊이. 그렇지 않으면 거짓값 되돌려줍니다. 요소만 노드입니다 지원됩니다. 만약 두 번째 argument 는 텍스트 또는 주석입니다 노드 () ',' $ 스콘테인스 반환되므로 거짓값.
> , 참고: 첫 번째 인수 DOM element, jQuery 객체가 아닌 JavaScript 객체 또는 일반 합니다.
내가 할 수 없는 'if ($ (선택기를) 트렌크스) {}' 부족합니다. Break your app '가 빈 객체에는 선택기를 때 자동으로 것' ' {}'.
var $target = $({});
console.log($target, $target.length);
// Console output:
// -------------------------------------
// [▼ Object ] 1
// ► __proto__: Object
나의 유일한 제안에 대한 추가적인 검사를 수행하는 것이 ' {}'.
if ($.isEmptyObject(selector) || !$(selector).length) {
throw new Error('Unable to work with the given selector.');
}
편집: , T # 39 이 때 IE 작업하십시오 doesn& 경고! '은' 선택기를 구체화하십시오.
$.isEmptyObject('hello') // FALSE in Chrome and TRUE in IE
이 길이 사용하여 자바 스크립트 방관하겠나 요소점과 확인할 수 있습니다. 이 경우 그 다음 요소가 전혀 없는 경우 길이 길이 χ02 보다 크다. 요소점 존재하지 않습니다.
// These by Id
if( $('#elementid').length > 0){
// Element is Present
}else{
// Element is not Present
}
// These by Class
if( $('.elementClass').length > 0){
// Element is Present
}else{
// Element is not Present
}
[존재를 확인하는 요소를] (https://learn.jquery.com/using-jquery-core/faq/how-do-i-test-whether-an-element-exists/) 는 웹 사이트 자체가 깔끔하게 문서화했습니다 jQuery 의 공식!
>. List. [트렌크스] (https://api.jquery.com/length/) 재산에 따라 반환되었습니다 jQuery 취합은 >. 선택기를: >. >. if ($ (# myDiv" ";) 트렌크스) { >. 리쇼 (), $ (", # myDiv") >. } >. >. 단, t # 39 이 표시할지를 테스트하려면 isn& 항상 필요한 요소가 있습니다. >. 다음 코드는 있으면 아무 일도 하지 않을 것이라고 볼 수 있는 요소 및 >. (오류 없이) 없는 경우. >. >. 리쇼 (), $ (", # myDiv")
영감을 [hiway& # 39 의 오토메이티드] (https://stackoverflow.com/a/19533724/177710) I came up with 다음과 같습니다.
$.fn.exists = function() {
return $.contains( document.documentElement, this[0] );
}
[제크리스콘테인스] (http://api.jquery.com/jQuery.contains/) 는 두 번째 1 에는 DOM 요소와 있는지 확인합니다.
'의' 존재 '를 사용하여 도쿠망스도쿠멘텔레먼트' 첫 번째 인수로 충족합니다 시맨틱스를 메서드로부터 적용하십시오 존재를 확인할 수 있는 요소를 단독으로 할 때 우리는 현재 문서.
<! - begin 스니핏: js 숨기십시오: 참 - >.
$.fn.exists = function() {
return $.contains(document.documentElement, this[0]);
}
var testFuncs = [
function(jq) { return !!jq[0]; },
function(jq) { return !!jq.length; },
function(jq) { return jq.exists(); },
];
var inputs = [
["$()",$()],
["$(4)",$(4)],
["$('#idoexist')",$('#idoexist')],
["$('#idontexist')",$('#idontexist')]
];
for( var i = 0, l = inputs.length, tr, input; i < l; i++ ) {
input = inputs[i][1];
tr = "<tr><td>" + inputs[i][0] + "</td><td>"
+ testFuncs[0](input) + "</td><td>"
+ testFuncs[1](input) + "</td><td>"
+ testFuncs[2](input) + "</td></tr>";
$("table").append(tr);
}
td { border: 1px solid black }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="idoexist">#idoexist</div>
<table style>
<tr>
<td>Input</td><td>!!$(sel)[0]</td><td>!!$(sel).length</td><td>$(sel).exists()</td>
</tr>
</table>
<script>
$.fn.exists = function() {
return $.contains(document.documentElement, this[0]);
}
</script>
끝 - < 스니핏 >;!