2013-08-03 5 views
2

Я пытаюсь удалить fakepath из URL с помощью LastIndexOf функции в чистом JavaScript Но вывод не показывается следующий мой JS код: -Javascript LastIndexOf не работает

function myFunction() 
{ 
var str="C:\fakepath\somefile.txt"; 
var m=str.lastIndexOf("\"); 
var n=str.substring(m+1); 
document.getElementById("demo").innerHTML=n; 
} 

Ниже мой HTML код : -

<p id="demo"> 
    Click the button to locate where in the string a specified value occurs. 
</p> 
<button onclick="myFunction()">Try it</button> 

Вы можете найти рабочий пример на моем jsfiddle при ->http://jsfiddle.net/xKPaK/4/

+1

Um, тот факт, что "и" никогда не встречается в "C: \ fakepath \ Somefile.txt" может иметь что-то делать с этим ... – AlliterativeAlice

+0

@Otome I отредактировали мою скрипку, но она по-прежнему не работает ... см. отредактированную ссылку – h2O

+3

Вы должны ввести точный код здесь не что-то другое. Ваша проблема легко найти, выделив синтаксис в jsFiddle. «\» должен быть экранирован, но не уверен, что это единственная проблема ... – elclanrs

ответ

1
  1. \ символы должны быть экранированы
    обратные косые черты используются для создания специальных символов в строках. Например, '\n' создает строку со значением символа новой строки, в то время как '\\n' создает строку со значением \n.
  2. myFunction должно быть в глобальной области действия, которая должна быть вызвана в обратном вызове атрибута HTML.
    Это причуда jsfiddle. Содержимое панели JavaScript фактически выполняется внутри функции, которая создает новую область для переменных и функций. Простое добавление функции к глобальному объекту устранит проблему.
function myFunction() { 
    var str, 
     m, 
     n; 
    str = "C:\\fakepath\\somefile.txt"; 
    m = str.lastIndexOf("\\"); 
    n = str.substring(m + 1); 
    document.getElementById("demo").innerHTML = n; 
} 
window.myFunction = myFunction; 

fiddle

+0

Проблема в том, что у меня есть строка как 'C: \ fakepath \ somefile.txt', а не 'C: \\ fakepath \\ somefile.txt' – h2O

+0

@BenLind, нет, вы действительно нет. У вас есть значение строки *, которое является 'C: \ fakepath \ somefile.txt', но для представления его в виде строки * literal * вы должны избегать символов' '\' '. Если вы вызываете 'alert (« C: \\ fakepath \\ somefile.txt »), это может иметь больше смысла. – zzzzBov

+0

@zzzzBov из интереса, если он читает эту строку из текстового файла или строки url через JavaScript, будет ли учетная запись JavaScript для неэкранированных символов при назначении им переменных? Я сделал много JavaScripting, но по какой-то причине это никогда не возникало. Бог знает, как это сделать. – shennan