2012-10-15 5 views
1

제목에 언급 된 것과 같습니다. 스크립트 태그 <script>에서 문자열을 바꿀 의향이 있습니다. 내가 바꾸고 싶은 것은 // 뭔가 다른 것에 의해 쓰여지는 문자열이다.html5 안에있는 문자열을 대체하십시오. <script>

ch="new string"; 
document.getElementById("general").replace('// WRITE',ch); 

하지만 난 다음 오류가 발생했습니다 :

<script name="general" id="general" type="text/javascript"> 
some code 
//Write 
</script> 

은 그래서 나는 자동으로 시도 catch되지 않은 형식 오류를 : 개체 #<HTMLScriptElement>가있는 방법 '교체'를이 없습니다. 그래서 나는 <div>과 달리 <script>은 그 방법을 사용하지 않는다는 것을 이해합니다. 동일한 방법이 있습니까? 미리 감사드립니다.

+2

이 작업을 수행 할 경우 내가 생각, 나쁜 일이 일어날 것입니다. –

+0

실제로 아무 것도 발생하지 않았습니다. –

답변

2
은 "에서 getElementById"에 의해 반환되는 객체가 DOM Element 그래서 당신이 innerHTML attribute에 할당하여 그 내용을 변경할 수 있습니다

:

var general = document.getElementById("general"); 
general.innerHTML = general.innerHTML.replace('//WRITE', ch); 

가 교체 토큰에 대한주의 - 샘플 "스크립트"태그는 리터럴 문자열을 사용 "// Write"를 시도하지만 정규 표현식은 존재하지 않는 "// WRITE"를 찾습니다.

[편집] 예제에 정의 된 스크립트는 브라우저가 페이지를로드 할 때 즉시 실행되므로 다른 스크립트로 수정하려고합니다. 가능성이 없다. 또한 브라우저에서 대상 ID가없는 요소가 없으므로 페이지에서 나중에 발생하는 스크립트를 수정하려고하면이 전략이 작동하지 않습니다. 한 가지 가능성은 정의 된 함수를 수정하여 나중에 호출 할 수 있지만 작동하지 않을 수도 있습니다. 자바 스크립트 블록에 동적 컨텐트를 포함시키는 더 좋은 전략은 JS 자체가 다른 방법 대신 DOM에서 정보를 찾도록하는 것입니다.

+0

원래 스크립트는 관계없이 실행됩니다 (주석 처리 된 행과 차이는 없습니다). – user123444555621

+0

@ Pumbaa80 : 예, 좋은 지적입니다. 나는 그 정보로 나의 대답을 업데이트 할 것이다. – maerics

+0

교체 할 코드가 함수 안에 있으면 어떻게 될까요? 어떤 차이가 있습니까? –

0

위의 설명에 따라 런타임에 스크립트를 변경하려고합니다.

일단 스크립트가 실행되면 "실행 취소"할 방법이 없습니다. 따라서주의를 기울여 수동으로 효과를 되돌려 야합니다.

당신은 두 번째 스크립트를 작성하고 실행할 수 있습니다

var oldScript = document.getElementById("general"); 
var newScript = document.createElement('script'); 
newScript.innerHTML = oldScript.innerHTML.replace('// Write', '// whatever'); 

// here comes the crucial part: 
// insert the new script into the head element; this triggers execution 
var head = document.getElementsByTagName('head')[0]; 
headhead.insertBefore(script, head.firstChild); 
관련 문제