2014-07-05 2 views
1

옵션 태그 (값 제외)의 모든 속성을 찾으려고하므로 옵션 태그를 목록 항목 태그로 바꾸고 속성을 목록 항목에 추가 할 수 있습니다.jQuery 함수는 PHP의 str_replace와 같습니다.

var elemAtts = $(this).replace('<option value="'+$(this).prop("value")+'" ', ''); 

이 전체입니다 : 이것은 다음 줄에서 발생

Uncaught TypeError: undefined is not a function 

: 나는 건너마다 구글 결과는하지만, 내가 콘솔에서 다음과 같은 오류가 발생하고,이 작업을 수행 할 replace()를 사용하여 말한다 스크립트 : 기본적으로

$('select').each(function(){ 

     var selectName = $(this).prop("name"); 
     var selectOpts = $(this).find("option"); 
     var selectPar = $(this).parent(); 

     var hiddenInput = '<input type="hidden" name="'+selectName+'" value="">'; 

     var menu = '<div class="jqSelect">' + 
      '<div class="selected-text" id="'+selectName+'-selected"><div id="'+selectName+'-text">'+$(this).find(":selected").text()+'</div>' + 
      '<div class="caret" onclick="$(\'ul#'+selectName+'-menu\').toggle();"></div>' + 
      '<ul id="'+selectName+'-menu">'; 

     selectOpts.each(function(){ 

      if($(this).is(":selected")){ 

       $('#'+selectName+'-selected').text($(this).text()); 
       menu += '<li class="selected"'; 

      } else { 

       menu += '<li'; 

      } 

      var elemAtts = $(this).replace('<option value="'+$(this).prop("value")+'" ', ''); 
      elemAtts = elemAtts.replace('>', ''); 

      menu += ' data-option-value="'+$(this).prop("value")+'" '+elemAtts+'>'+$(this).text()+'</li>'; 

     }); 

     menu += '</ul></div>'; 

     selectPar.html(menu + hiddenInput); 

     $('ul#'+selectName+'-menu').hide(); 

     generatedMenu = $('#'+selectName+'-menu'); 
     generatedMenu.find('li').each(function(){ 

      $(this).on('click', function(){ 

       $('#'+selectName+'-text').text($(this).text()); 
       $('#'+selectName+'-menu').hide(); 
       $('input[name="'+selectName+'"]').attr("value", $(this).data('option-value')); 
       $(this).siblings().removeProp('class'); 
       $(this).prop('class', 'selected'); 
      }); 

     }); 

    }); 

내가이를 설정하면된다하려고 ...

이 (캐릭터 라인 형식) 속으로

...

rel="toggleElem" class="foo" id="bar" 

답변

1

좋아, 나는 Google-ing을 조금 더 사용하여 답변 here을 발견했습니다. replace()가 실제로 JavaScript 함수 일 때 jQuery 함수라고 생각했습니다. $ (this)로 직접 사용했기 때문에 오류가 발생했습니다. 내가해야 할 일은 다음과 같습니다.

var tag = $(this).prop('outerHTML'); 
var elemAtts = tag.replace('<option value="'+$(this).prop("value")+'" ', ''); 
elemAtts = elemAtts.replace('>'+$(this).text()+'</option>', ''); 
0

모든 DOM 노드는 그것의 모든 속성의 맵 인 attributes 속성이 있습니다.

문자열을 반복하여 다른 요소로 전달할 수 있으며 문자열 교체에 대해 걱정할 필요가 없습니다.

동일한 속성을 가진 <li> 단일 <option> 변환됩니다 다음은 당신이

DEMO

MDN Node.attributes docs을 원하는 경우

var $opt=$('option'); 

/* get the attributes of the DOM node */ 
var optAttributes = $opt[0].attributes; 

/* new attribute object to pass to new <li> */ 
var listItemAttr={}; 

$.each(optAttributes, function(_, attr){ 
    /* each attribute object has a "name" and "value" property*/ 
    listItemAttr[attr.name]= attr.value 
}); 

var $li=$('<li>', listItemAttr).text($opt.text()); 

가 값 속성을 제거하기 위해 약간 수정

관련 문제