2017-09-28 9 views
2

ん:、ハードコードされたテキストは動作しますが、パラメータに渡されたことは、この機能を与えられていない

function highLightLi(className, textContent){ 

    if ($("body").hasClass(className)){ 

    $(".second-navbar").find("li:contains(textContent)").addClass("current"); 
    } 
} 

highLightLi('page-template-taller', 'Taller'); 

私は文が真として合格した場合、私はのTextContentをハードコーディング場合、それは私が欲しいものを行い、追加していることを知っています私はそれをどのように書くかにかかわらず、それはパラメータとして渡されません。私は間違って何をしていますか?

答えて

1

はこれにあなたの検索ステートメントを変更してみてください。

$(".second-navbar").find("li:contains('"+textContent+"')").addClass("current"); 

あなたが動的に関数に渡されているものから、あなたの文字列を追加することができますので、検索文の中で文字列を連結する必要があります。

それが機能するかどうかを教えてください。

+0

'textContent'にアポストロフィが含まれている場合はもちろん、ブレイクのこの意志。解析する文字列ではなく、 'textContent'をパラメータとして受け入れる' .filter'などを使用する方がよいでしょう。 –

+0

@NiettheDarkAbsolはい、それは良い点です。 –

+0

それは私のために働いたthanks.Acceptingときに私を許可します。 – Sergi

0

これには、filtertrimの方法の組み合わせを使用できます。ノードテキストにアポストロフィがあるところで、文字列がエスケープしないようにする必要があります。

function highLightLi(className, textContent) 
 
{ 
 
    
 
    if ($("body").hasClass(className)) 
 
    { 
 
    //filter through all li elements 
 
    $(".second-navbar li").filter(function() 
 
    { 
 
     //use trim method to remove white space 
 
     var liText = $(this).text().trim(); 
 
     var containsText = false; 
 
     
 
     //Check if node contains string parameter 
 
     if (liText.indexOf(textContent) >= 0) 
 
      containsText = true; 
 
     
 
     //return if li text contains textContent parameter and add the class 
 
     return containsText;  
 
     
 
    }).addClass("current"); 
 
    } 
 
} 
 

 
//escape the apostrophe 
 
var searchParam = "your's"; 
 
highLightLi("page-template-taller", "Taller"); 
 
highLightLi("page-template-taller", searchParam);
.current 
 
{ 
 
    background: yellow; 
 
    font-size: 16px; 
 
    font-weight: bold; 
 
} 
 

 
.page-template-taller 
 
{ 
 
    font-size: 14px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 
 
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/> 
 

 
<body class="page-template-taller"> 
 
    <nav class="navbar navbar-default"> 
 
    <div class="container-fluid"> 
 
     <ul class="second-navbar nav navbar-nav"> 
 
     <li><a href="#"> Tall </a></li> 
 
     <li><a href="#"> Taller </a></li> 
 
     <li><a href="#"> Tallest </a></li> 
 
     <li><a href="#"> your's is Taller </a></li> 
 
     </ul> 
 
    </div> 
 
    </nav> 
 
</body>

関連する問題