현재 노드를 포함하는 jQuery find(...) 메서드를 찾고 있습니다.
jQuery find(...) traversal 메서드는 현재 노드를 포함하지 않습니다. 현재 노드의 자식 노드로 시작합니다.일치 알고리즘에 현재 노드를 포함하는 찾기 작업을 호출하는 가장 좋은 방법은 무엇입니까?서류를 훑어보면 아무것도 즉시 나에게 달려들지 않습니다.
jQuery 1.8 이상의 경우 를 사용할 수 있습니다.선택기가 필요하므로 결과를 필터링할 필요가 없습니다.
object.find('selector').addBack('selector')
jQuery 1.8 이전에는 (현재는 더 이상 사용되지 않고 제거됨)로 고정되어 필터링이 필요했습니다.
object.find('selector').andSelf().filter('selector')
직접적으로 할 수는 없습니다. 가장 가까운 방법은 다음과 같이 사용하고 전화하는 것입니다.
$(selector).find(oSelector).andSelf().filter(oSelector)
//or...
$(selector).find('*').andSelf().filter(oSelector);
안타깝게도 선택기가 필요하지 않습니다. 편리할 것입니다.
정의
$.fn.findSelf = function(selector) {
var result = this.find(selector);
this.each(function() {
if ($(this).is(selector)) {
result.add($(this));
}
});
return result;
};
그 다음에 사용
$.findSelf(selector);
대신에
$find(selector);
안타깝게도 jQuery에는 이 기본 제공 기능이 없습니다.오랜 개발 기간 동안 정말 이상했습니다..find()의 작동 방식 때문에 AJAX 핸들러가 일부 상위 요소에 적용되지 않았습니다.
$('selector').find('otherSelector').add($('selector').filter('otherSelector'))
저장할 수 있습니다.$('selector')속도를 높이기 위한 변수로.필요한 경우 사용자 정의 함수를 작성할 수도 있습니다.
$.fn.andFind = function(expr) {
return this.find(expr).add(this.filter(expr));
};
$('selector').andFind('otherSelector')
허용된 답변은 매우 비효율적이며 이미 일치하는 요소 집합을 필터링합니다.
//find descendants that match the selector
var $selection = $context.find(selector);
//filter the parent/context based on the selector and add it
$selection = $selection.add($context.filter(selector);
체인이 제대로 작동하려면 아래의 스니펫을 사용하십시오.
$.fn.findBack = function(expr) {
var r = this.find(expr);
if (this.is(expr)) r = r.add(this);
return this.pushStack(r);
};
종료 함수 호출 후 #foo 요소를 반환합니다.
$('#foo')
.findBack('.red')
.css('color', 'red')
.end()
.removeAttr('id');
추가 플러그인을 정의하지 않으면 이 문제가 해결되지 않습니다.
$('#foo')
.find('.red')
.addBack('.red')
.css('color', 'red')
.end()
.end()
.removeAttr('id');
현재 요소 또는 내부 요소 중 하나를 찾는 경우 다음을 사용할 수 있습니다.
result = elem.is(selector) ? elem : elem.find(selector);
여러 요소를 찾고 있는 경우 다음을 사용할 수 있습니다.
result = elem.filter(selector).add(elem.find(selector));
의 사용andSelf/andBack왜 그런지는 모르겠지만 꽤 드문 일입니다.아마 제 앞에 어떤 남자들이 언급한 공연 문제 때문일 것입니다.
(Tgr이 이미 두 번째 솔루션을 제공했다는 것을 알게 되었습니다.)
이것이 오래된 질문이라는 것을 알지만, 더 정확한 방법이 있습니다.순서가 중요한 경우, 예를 들어 다음과 같은 선택기를 일치시킬 때:first나는 약간의 함수를 작성했는데 그것은 정확히 같은 결과를 반환할 것입니다.find()실제로는 현재 요소 집합을 포함했습니다.
$.fn.findAll = function(selector) {
var $result = $();
for(var i = 0; i < this.length; i++) {
$result = $result.add(this.eq(i).filter(selector));
$result = $result.add(this.eq(i).find(selector));
}
return $result.filter(selector);
};
효율적이지는 않겠지만, 제대로 된 질서를 유지하기 위해 생각해 낸 것 중에 최고입니다.
반복되지 않는 솔루션(즉, 동일한 셀렉터를 두 번 입력하지 않음)을 찾으려고 했습니다.
이 작은 jQuery 확장 기능은 다음과 같습니다.
jQuery.fn.findWithSelf = function(...args) {
return this.pushStack(this.find(...args).add(this.filter(...args)));
};
결합니다합을 조합한 입니다.find()) 포함이 있는 (후손에 한함)filter()(현재 세트만) 그리고 둘 다 먹는 모든 인수를 지원합니다.pushStack()할 수 있습니다..end()예상대로 작동합니다.
다음과 같이 사용:
$(element).findWithSelf('.target')
그게 당신이 원하는 것 같아요.
obj.find(selector).andSelf()
그러면 선택기와 일치하는지 여부에 관계없이 항상 현재 노드가 다시 추가됩니다.
현재 노드(들)를 엄격하게 들여다보고 있는 경우에는
$(html).filter('selector')
올바른(하지만 슬픈) 진실은 다음과 같습니다.
$(selector).parent().find(oSelector).filter($(selector).find('*'))
http://jsfiddle.net/SergeJcqmn/MeQb8/2/
언급URL : https://stackoverflow.com/questions/2828019/looking-for-jquery-find-method-that-includes-the-current-node
'programing' 카테고리의 다른 글
| PowerShell에서 C# 코드 실행으로 개체 또는 여러 값을 반환하려면 어떻게 해야 합니까? (0) | 2023.07.31 |
|---|---|
| 인쇄 스타일시트를 디버깅하기 위한 제안사항은 무엇입니까? (0) | 2023.07.31 |
| 회전을 제대로 처리하는 아이폰용 뷰포트 메타를 설정하는 방법은? (0) | 2023.07.31 |
| 모든 파일 및 폴더 삭제, 하위 폴더 제외 (0) | 2023.07.31 |
| 아이폰 앱에서 UIButton/UILabel '패딩'을 달성하는 방법 (0) | 2023.07.31 |