2015-02-04 5 views
1

저는 데이터베이스에 저장된 기사를 조작하기 위해 jQuery를 사용하고 있습니다.regex + str_replace를 사용하여 jQuery 태그를 작성하십시오.

각 기사는 섹션으로 구분됩니다. 일반적인 섹션의 HTML은 다음과 같습니다.

<section id="directions" data-toggle="collapse" data-target="#directions2" class="SecCon"> 
    <h2><span class="label label-primary"><small><span class="only-collapsed glyphicon glyphicon-chevron-down"></span><span class="only-expanded glyphicon glyphicon-remove-sign"></span></small> Directions</span>  </h2> 
    <div id="directions2" class="collapse in article"> 
    <p>Animals have the power of locomotion.</p> 
    </div> 
<section> 

잘 작동합니다. 일부 jQuery 스크립트와 결합되어 각 섹션을 열거 나 닫고 텍스트를 표시하거나 숨길 수있는 버튼 형태로 각 표제를 표시합니다.

나를 괴롭히는 유일한 문제는 코드 팽창입니다. 온라인으로 갈 수있는 기사가 수백 가지가 있으며 그 코드, 글리 phicon 등을 모두 추가하면 고통 스러울 것입니다.

내가 첫 번째 단락 태그 전에이에 대한 모든 것을 응축 경우

그래서 상상 :

내 데이터베이스에 저장 될 수 있지만, 디스플레이가없는 str_replace와 정규 표현식으로 변경 될 수
<section> 
    <h2>Directions</h2> 
    <div> 

가 빈칸을 채울를 위에 게시 한 코드 블록으로 변환합니다. 그리고 '길 찾기'가 '생태학'으로 대체되면 '방향'의 모든 사례가 '생태학'으로 대체된다는 점을 제외하고는 스타일이 동일하게 적용됩니다.

추가 장점은 모든 데이터베이스 테이블을 변경하지 않고도 코드를 크게 변경할 수 있다는 것입니다.

내가이 프로젝트에 뛰어 들기 전에, 나는 누군가가 나에게 이것이 실행 가능한 계획인지 또는 바보 같은 생각인지를 말해 줄 수 있는지 궁금해했다. 그것을하는 더 좋은 방법이 있습니까?

+0

[당신은 구문 분석 할 수 없습니다 (X) HTML 정규식을 (http://stackoverflow.com/a/1732454/1529630). – Oriol

+0

기사의 데이터가 데이터베이스에 저장되지 않았습니까? 서버 코드와 데이터를받는 형식을 보여줄 수 있습니까? – 1252748

+0

@thomas - 죄송합니다. "서버 코드"가 무슨 뜻인지 모르겠습니다. 나는 PHP와 MySQL을 가지고 일하고있다. 간단히 데이터베이스에 쿼리 한 다음 $ Content를 에코하여 기사를 표시합니다. –

답변

1

추가 마크 업없이 HTML을 저장하고 저장하십시오.

<section> 
    <h2>Directions</h2> 
    <div>Some directions</div> 
</section> 
<section> 
    <h2>Ecology</h2> 
    <div>Ecology info</div> 
</section> 

javascript/jQuery를 사용하여 ID, 범위 및 클래스를 아무런 문제없이 추가 할 수 있습니다. 이 같은 (demo) 시도 :

$(function() { 
    $('section').each(function() { 
     var html, 
      $this = $(this), 
      $h2 = $this.children('h2'), 
      sectionId = $h2.text().toLowerCase(); 
     $this.attr({ 
      class : 'SecCon', 
      id : sectionId, 
      'data-toggle' : 'collapse', 
      'data-target' : '#' + sectionId + '2' 
     }); 
     $h2.wrapInner('<span class="label label-primary"/>'); 

     html = '<small>' + 
      '<span class="only-collapsed glyphicon glyphicon-chevron-down"></span>' + 
      '<span class="only-expanded glyphicon glyphicon-remove-sign"></span>' + 
      '</small>'; 
     $h2.find('.label').prepend(html); 

     $this.children('div').attr({ 
      class : 'collapse in article', 
      id : sectionId + '2' 
     }); 
    }); 
}); 
+0

와우, 멋지다! 그래도 한 가지 실수를 저질렀습니다. 헤더 제목이 "Evolution"인 경우 스크립트에서 ID "evolution"를 만듭니다. 하지만 한 단어 이상으로 머리글을 생각한 적이 없었습니다. 예를 들어 헤더 "How Evolution Works"는 "진화가 어떻게 작용하는지"라는 ID를 산출합니다. 나는 염두에 둬야 할 점이 있지만 나중에 오늘까지 새로운 질문을하지 못할 수도 있습니다. 내가 게시 할 때 동일한 질문을하는 다른 사람들을 위해 여기에 새로운 질문에 대한 링크를 게시 할 것입니다. –

+0

가장 쉬운 해결책은 공백을 대시로 바꾸는 것입니다 :'sectionId = $ h2.text(). toLowerCase(). replace (/ \ s/g, '-'); ' – Mottie

+0

맞아요. . ;) –