2013-08-23 64 views
5

Tôi đang sử dụng javascript để ẩn một số mục danh sách dựa trên vai trò người dùng.văn bản jquery() không so sánh với chuỗi

Tôi nhận vai trò từ một mục danh sách là text(). Khi tôi so sánh giá trị $("#activeUser").text() với một chuỗi, nó không hoạt động.

Chặn HTML mà tôi đang sử dụng trong javascript của mình để nhận giá trị text() của một mục danh sách.

<ul class="pull-right breadcrumb"> 
    <li><a href="index.php">Home</a> <span class="divider">/</span> </li> 
    <li id="activeUser" class="active"> <?php echo ucfirst($_SESSION['sewafs_user_role']); ?> </li> 
</ul> 

Javascript

$(document).ready(function() { 
    var testRole = $("#activeUser").text(); 

    //This block of code works 
    role = 'Guest'; 
    if (role == 'Guest') { 
     alert("Inside if"); 
     $("#request_history_li").hide(); 
     $("#assign_role_li").hide(); 
     $("#volunteer_li").hide(); 
     $("#profile_li").show(); 
     $("#change_password_li").show(); 

    } 

    //This doesn't work why? 
    if (testRole == 'Guest') { 
     alert("Inside if"); 
     $("#request_history_li").hide(); 
     $("#assign_role_li").hide(); 
     $("#volunteer_li").hide(); 
     $("#profile_li").show(); 
     $("#change_password_li").show(); 

    } 

}); 

Nhưng nếu tôi nhìn thấy giá trị của var testRole sử dụng cảnh báo nó in Khách.

Tôi đã thử chuyển đổi giá trị testRole thành chuỗi bằng phương thức testRole.toString()/string (testRole), nhưng không có gì hữu ích.

Vui lòng cho tôi biết, nơi tôi đang gặp sự cố. Cảm ơn.

Trả lời

6

Vấn đề có vẻ là thêm khoảng trắng trong giá trị mà bạn nhận được từ $("#activeUser").text()

Giải pháp: Bạn phải cắt giá trị và sau đó sử dụng nó để so sánh như:

var testRole = $("#activeUser").text().trim(); 

HOẶC

var testRole = $.trim($("#activeUser").text()); 

HOẶC

var testRole = $("#activeUser").text(); 
testRole = $.trim(testRole); 

Bất kỳ những điều trên sẽ làm việc.

Thông tin thêm về jQuery trim tại this link.

Khoảng trắng kiểm tra:
Nếu bạn muốn kiểm tra nếu bạn đang nhận được thêm không gian màu trắng, sau đó thử bên dưới mã javascript:

alert("-" + $("#activeUser").text() + "-"); 

Nếu bạn nhận được "", sau đó bạn không có khoảng trắng trong của bạn giá trị nhận được. Nhưng nếu bạn nhận được dấu cách sau < hoặc trước >, thì đây là những khoảng trắng, sẽ làm hỏng bữa tiệc của bạn.

+0

Cảm ơn bạn rất nhiều. Khi tôi gặp vấn đề này, tôi nghĩ rằng không gian màu trắng có thể là vấn đề, nhưng trim() dint tấn công với tôi. Cảm ơn bạn về các mẹo bổ sung. – user2617611

3

Thử cắt xén chuỗi, với $.trim($("#activeUser").text()); Dường như có khoảng trắng trong phần tử của bạn.

+0

cảm ơn bạn ..it làm việc tại – user2617611

0

Bạn cần phải cắt không gian màu trắng ở đầu và cuối của chuỗi:

var testRole = $("#activeUser").text().replace(/^\s+|\s+$/g,''); 

Bạn có thể thấy lý do tại sao ở đây: http://jsfiddle.net/AfUZR/1/

+0

Cám ơn ám "http://jsfiddle.net/AfUZR/ 1/"Tôi nghĩ nó sẽ rất hữu ích cho tôi. – user2617611

0

Demo

$(document).ready(function() { 
     var testRole = $("#activeUser").text().trim();  
     //This doesn't work why? 
     if (testRole == "Guest") { 
      alert("Inside if"); 
      $("#request_history_li").hide(); 
      $("#assign_role_li").hide(); 
      $("#volunteer_li").hide(); 
      $("#profile_li").show(); 
      $("#change_password_li").show(); 

     } 

    }); 
-1

Người đàn ông, trước tiên bạn phải làm gì, nó viết bộ chọn chính xác.

$("#request_history_li").hide(); 
$("#assign_role_li").hide(); 

bạn có thể viết

$("#request_history_li, #assign_role_li").hide(); 

hoặc bạn có thể thêm các lớp học tương tự của các yếu tố, đó là chính xác

<ul> 
    <li class="same_class 1"></li> 
    <li class="same_class 2"></li> 
</ul> 

$(".same_class").hide(); 

ok? tiếp theo:

Như liên quan đến vấn đề của bạn, JS nạp sớm hơn bạn xác định vai trò của, sử dụng

$(document).ready(function(){ 
    ...... 
}); 
Các vấn đề liên quan