2013-12-10 2 views
0

URL을 쿼리 문자열로 검색하고 해당 쿼리가있는 경우 해당 쿼리를 무시하는 스크립트를 사용하고 있습니다. 스크립트는 작동하지만 쿼리 문자열이있는 경우에만 작동합니다. 내가 얻는 오류는 Uncaught TypeError: Cannot call method 'indexOf' of undefined이므로 오류가 발생하는 곳은 분명합니다. 해결 방법을 모르겠습니다. 쿼리 문자열을 찾았을 때 indexOf 만 실행하면됩니까? 이것을 어떻게 할 수 있습니까?indexOf 함수의 조건부 사용

var href = jQuery(this).attr('href'); 
var fname = href; 
var query = href.indexOf("?"); 

if (query !== -1) { 
    fname = href.substr(0, query); 
} 

가 난 그냥 조건부 스크립트의 href.indexOf("?"); 부분을 실행해야이 문제를 해결하기 위해 생각하지만, 내 모든 시도는 지금까지 실패 :

다음은 JS가 오류의 원인입니다.

+0

_all 내 시도는 실패했습니다. – Mathletics

+1

당신은'href' ** 속성 **을보고 있으므로'href'의 쿼리 문자열을 나타내는'search' ** 속성 **을 볼 수 있어야합니다. 예를 들어,'var a = document.createElement ("a"); a.href = "http://www.example.com/?var=val"; 경고 (a.search); ' – Ian

+0

OP에서 그가 원하는 것을 말하지 않는 오류를 디버깅하려고합니다. 이 스크립트는'A' 태그에서 실행됩니까? 'window.location'을 확인 하시겠습니까? 간단한'var href = jQuery (this) .attr ('href') || '';는 오류를 제거하지만 오류를 해결하지는 않습니다. – eithed

답변

0

"?" href가 비어있을 수도 있습니다.

Live Demo

그냥 정보
function getFName(link) { 
    var href = link.href || "no href found"; 
    return href.split("?")[0]; 
} 

var a = document.createElement("a"); 
a.href = "http://www.google.com/search?q=something"; 
var fname = getFName(a); 
window.console && console.log(fname); 
a.href = "http://www.google.com/search"; 
fname = getFName(a) 
window.console && console.log(fname); 

대신 HREF

의 쿼리 문자열

테스트 검색 속성이 있다면 당신이 알고해야하는 경우 테스트 할 수있는 링크의 검색 속성이 존재

var query = this.search; 
var fname = query?this.href.split("?")[0]:this.href; 
+0

Downvoters 의견 있으십니까? – mplungjan

+0

답변의 두 번째 부분은 정상적으로 작동했습니다. 고맙습니다! –

0

indexOf를 호출하기 전에 href가 정의되지 않았는지 확인하십시오.

-2

이 함수는 쿼리 문자열의 값을 반환하거나 찾을 수없는 경우 빈 문자열을 반환합니다.

function getQueryParameterByName(name) { 

      name = name.replace(/[\[]/, "\\\[").replace(/[\]]/gi, "\\\]"); 
      var regexS = "[\\?&]" + name + "=([^&#]*)"; 
      var regex = new RegExp(regexS, "i"); 
      var results = regex.exec(window.location.href); 
      if (results == null) 
       return ""; 
      else 
       return decodeURIComponent(results[1].replace(/\+/gi, " ")); 
} 
+1

link.search를 반환 할 수있을 때 정신 나간 정규식 낭비. 어쨌든 OP는 쿼리 문자열에 관심이 없지만 URL이 없으면 – mplungjan

+0

꽤 쉽습니다. 질문을 읽을 때 나는 지쳤다. – chaaya

0

http://jsfiddle.net/dqzhz/

var url = getURL("http://www.example.com?q=1&x=2"); 
alert(url); 

function getURL(link) { 
    url = document.createElement('a'); 
    url.href = link; 
    return url.protocol + "//" + url.host; 
} 
0

http://api.jquery.com/attr/ :

As of jQuery 1.6, the .attr() method returns undefined for attributes that have not been set.

undefined.indexOf(...) 충돌하지만,이 같은 빈 문자열에 다시 떨어질 수 :

var query = (href || '').indexOf('?'); 

그것을 진실 또는 빈 문자열 "을 의미합니다.

undefined || '' -> '' 
     "" || '' -> '' 
     "a" || '' -> "a"