2012-06-12 2 views
2

특정 요소에 액세스하여 조작 할 수있는 jQuery 함수를 작성하려고합니다. 지금까지 특정 ID에 액세스하고 조작 할 수만 있었지만 매개 변수로 문자열을 가져 오는 함수를 프로그래밍하는 방법을 알지 못했으며 기본적으로 조작하려는 모든 요소에 대해이 함수를 다시 사용할 수 있습니다. 그것은 나를 ID의 그룹을 조작 할 수 있습니다jQuery에서 ID 그룹을 조작하는 기능

jQuery(document).ready(function() { 

// id for the trigger 
var trigger = jQuery('#acf-use_right_column'); 

if (jQuery(trigger).length) { 
    // list of ids to be manipulated 
    var ids = jQuery('#acf-content_right_column, #acf-show_content, #acf-show_news, #acf-news_header, #acf-show_newsletter_form'); 
     // toggle element on click to hide/show 
     trigger.find('input:checkbox').click(function() { 
      ids.toggle(); 
     }); 
     // hide id in dependence of the state of the checkbox 
     trigger.find('input:checkbox').each(function(){ 
      // if checkbox not checked 
      if(!jQuery(this).attr('checked')){ 
       ids.hide(); 
      } 
     });  

} 

}); 

:

이것은 내가 지금까지있는 것입니다. 내 문서에서 다른 ID 그룹을 조작하려면 동일한 코드를 다시 작성해야합니다. 아무도 매개 변수를 받아들이는이 코드에서 함수를 만드는 법을 말해 줄 수 있습니까? 함수의 매개 변수 문자열로 조작하려는 ID로 함수를 호출하고 싶습니다. 아이디어가 있으십니까?

+0

같은 것을 사용할 수 있습니다 # 'acf-content_right_column, # acf-show_content, # acf-show_news, # acf-news_header, # acf-show_newsletter_form'대신 ID의 배열을 사용합니까? –

+0

네, 배열을 사용하고 싶습니다. 특정 ID 컬렉션을 가지고 있기 때문에 기본적으로 다른 ID에 적용하지 않고 코드를 '다시 사용'하고 싶습니다. 함수/플러그인을 사용하면 그렇게 할 수는 있지만 솔루션이 복잡하기 때문에 해결책을 찾을 수 없습니다. 나는 그것을 시도했다. 그러나 나의 머리는 담배를 피우고 있었다. :)) – endolil

답변

0

아래의 코드는, 그것은 정확하지 않을 수 있습니다 볼 수 있지만 이것은 당신이 필요로하는 모든이의 배열을 설정하는 방법입니다 당신이

+0

멋지지만 솔직히 내 jquery 기술이 작동하도록 충분하지 않습니다. 나는이 스크립트가 무엇을 하는지를 정말로 이해하지 못한다. ;) – endolil

+0

좀 더 길게 읽고 다른 예제를 여기에 적용한 후에 나는 당신의 기능을 이해하기 시작했습니다. 어떻게 든 이해하고 적응하기가 더 쉬운 다른 솔루션이 있습니다. 다시 한번 감사드립니다. – endolil

1

필요 기능을 조작 할 전화보다 당신은 appraoch에게

var manipulate=function(tiggerobj, arrayofobj){ 

// step1 :- use parameter1 fpr id for the trigger 
var trigger = jQuery(tiggerobj); 

if (jQuery(trigger).length) { 
    // list of ids to be manipulated 
var ids=new Array(); 
//step2 :-accumaltae all the ids 
for (var ob in arrayofobj){ 

id.push(jQuery(arrayofobj(ob))); 
} 


     //step3- toggle element on click to hide/show 
     trigger.find('input:checkbox').click(function() { 
      ids.toggle(); 
     }); 
     // hide id in dependence of the state of the checkbox 
     trigger.find('input:checkbox').each(function(){ 
      // if checkbox not checked 
      if(!jQuery(this).attr('checked')){ 
       ids.hide(); 
      } 
     });  

} 

} 

를 사용하십시오 ID를 jQuery가 이해할 수있는 ID 선택기에 추가하십시오. jQuery에 대해 알고 있다면이 사실을 알기 어렵지 않습니다.

// Name it whatever you want, 'pancakes' is my 'foo'. 
function pancakes(trigger, ids) { 
    trigger = $('#' + trigger); 
    // `trigger` is a jQuery object already so you don't have to 
    // `jQuery(trigger)` here 
    if(trigger.length) { 
     // This turns `['a','b','c']` into `$('#a,#b,#c')`, the $.map adds the 
     // `'#'` prefix to each element of the `ids` array and produces another 
     // array with the prefixed `ids`; the `join` sticks the elements of the 
     // new array together into a multiple selector. 
     ids = $($.map(ids, function(id) { return '#' + id }).join(',')); 

     // And the rest is as you had it... 
    } 
} 

그럼 당신은 다음과 같이 사용할 수 있습니다 :

pancakes(
    'act-use_right_column', 
    ['acf-content_right_column', 'acf-show_content', 'acf-show_news', 'acf-news_header', 'acf-show_newsletter_form'] 
); 

참고 :

+0

:) 대단히 감사합니다 ... 오늘이나 내일이 문제를 해결하고 몇 가지 피드백을 드리겠습니다. – endolil

+0

이것은 완전히 놀랍습니다. 그것은 매력처럼 작동하며 코드가 너무 짧기 때문에 매우 효율적이라고 생각합니다. 나는 워드 프레스 관리자 인터페이스 ('고급 사용자 정의 필드'라는 플러그인을 기반으로)를 간소화하기 위해이 도구를 사용하고 있습니다. 여기에서 체크 상자의 상태에 따라 필드를 숨기거나 표시 할 수 있습니다. 인터페이스를 통한 작업이 훨씬 쉬워졌습니다. – endolil

1

당신이 생각하는 것보다 훨씬 간단합니다, 당신은, 당신의 함수 내에서 javascript 변수를 사용할 수 있습니다

function myNewFunction(parameter1,parameter2){ 

     var trigger = jQuery(parameter1); 
     if (jQuery(trigger).length) { 
      // list of ids to be manipulated 
      var ids = jQuery(parameter1+', '+parameter2+'_content, '+parameter2+'_news, '+parameter2+'_header, '+parameter2+'_newsletter_form'); 
      // toggle element on click to hide/show 
      trigger.find('input:checkbox').click(function() { 
       ids.toggle(); 
      }); 
      // hide id in dependence of the state of the checkbox 
      trigger.find('input:checkbox').each(function(){ 
      // if checkbox not checked 
      if(!jQuery(this).attr('checked')){ 
       ids.hide(); 
      } 
     });  
    } 
} 

myNewFunction('#acf-use_right_column','#acf-show'); 

당신은 문자열의 배열을 사용하고 그래서 사용하려는

... 
compare = ids.lenght-1 
for (var key in idArray){ 
    if(key!=compare){ 
     string=string+idArray[key]+', ' 
    }else{ 
     string=string+idArray[key] 
    } 
} 
ids = jQuery(string) 
... 

idArray = new Array('#id1','#id2','#id3','#id4') 
+0

고마워요. 오늘이나 내일 시험해보고 피드백을 드리겠습니다. :) – endolil

+0

그것은 꽤 굉장합니다. 나는 단지 몇 분 만에 매우 유용한 기능을 구축했다. 나는 그 원리를 이해하기 시작했다. – endolil

관련 문제