Frage jquery text () nicht mit String vergleichen


Ich verwende Javascript, um einige Listenelemente basierend auf der Benutzerrolle auszublenden.

Ich bekomme die Rolle von einem Listenelement text(). Wenn ich das vergleiche $("#activeUser").text() Wert gegen eine Zeichenfolge, es funktioniert nicht.

HTML-Block, den ich in meinem Javascript verwende, um den text () -Wert eines Listenelements zu erhalten.

<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();

    }

});

Aber wenn ich den Wert der var testRole mit der Warnung sehe, druckt Guest.

Ich versuchte, den testRole-Wert mit der Methode testRole.toString () / string (testRole) in einen String zu konvertieren, aber nichts half.

Bitte lassen Sie mich wissen, wo ich falsch liege. Vielen Dank.


5
2017-08-23 06:23


Ursprung


Antworten:


Das Problem scheint zusätzliche Leerzeichen in dem Wert zu sein, von dem Sie erhalten $("#activeUser").text()

Lösung: Sie müssen den Wert trimmen und dann zum Vergleich verwenden:

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

ODER

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

ODER

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

Irgendeines der oben genannten wird funktionieren.

Weitere Informationen über jQuery trimmen bei dieser Link.

Whitespace-Test:
Wenn Sie testen möchten, ob Sie zusätzliche Leerzeichen erhalten, versuchen Sie es mit dem folgenden JavaScript-Code:

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

Wenn Sie "" erhalten, haben Sie keine Leerzeichen in Ihrem empfangenen Wert. Aber wenn du danach Räume bekommst < oder davor >Dann sind das weiße Räume, die deine Party verderben.


6
2017-08-23 06:49



Versuchen Sie, die Zeichenfolge mit zu trimmen $.trim($("#activeUser").text()); Es scheint in deinem Element Whitespaces zu geben.


3
2017-08-23 06:26



Sie müssen weiße Leerzeichen am Anfang und am Ende des Strings trimmen:

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

Sie können sehen, warum hier: http://jsfiddle.net/AfUZR/1/


0
2017-08-23 06:31



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();

        }

    });

0
2017-08-23 06:42



Mann, zuerst, was musst du tun, es ist richtig schreiben Selektor.

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

Du kannst schreiben

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

oder Sie können die gleichen Klassen dieser Elemente hinzufügen, das ist richtig

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

und

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

OK? Nächster:

In Bezug auf Ihr Problem, js früher geladen, als Sie die Rolle bestimmen, verwenden

$(document).ready(function(){
  ......
});

-1
2017-08-23 08:08