2015-01-12 3 views
-1

이것은 이전 질문의 후속 조치입니다. Greasemonkey를 사용하여 <td>의 텍스트를 해당 텍스트가 포함 된 링크로 변경하려고합니다.텍스트를 해당 텍스트의 링크로 바꾸시겠습니까?

그래서 페이지가

<td class="something"><div style="width: 200px;"> 
    randomtext 
</div></td> 

를 포함하고 난에 그리스 몽키를 사용하여 변경하려면 :

<td class="something"><div style="width: 200px;"> 
    <a href="www.somewhere.com/q?=randomtext">randomtext</a> 
</div></td> 

지금까지 내가 함께이 코드 조금 자갈길했지만, 난

// ==UserScript== 
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js 
// ==/UserScript== 
(function() { 
    var reference = document.getElementsByTagName('something') 
    var replacement = reference.replace(reference, "www.somewhere.com/q?=" + reference) 
    document.getElementById("user-reference-value").innerHTML = replacement; 
})(); 

더 이상이 작업을 수행하려면 어떻게해야합니까?

+0

1. 당신은 프로토콜을 사용하여 HREF를 시작해야합니다 (HTTP 같은 : // 예를 들어) 2. getElementsByTagName은 태그 이름으로 요소의 배열을 반환합니다. 코드에 '무언가'태그가 없습니다. '무언가'라는 클래스 속성을 가진 요소. 3. getElementsByTagName ('td')을 시도하면 모든 td 요소의 배열을 얻을 수 있습니다. for 루프로 반복하고 $ (reference [i]). hasClass ('something')인지 확인할 수 있습니다. – mondjunge

답변

0

jQuery를 잊어 버리면 페이지가 느려집니다. 난 정말이 코드를 테스트하지 않은,하지만 몇 가지 디버깅 어쩌면 작동합니다 :

// ==UserScript== 
// ==/UserScript== 
(function() { 
    // collect variables 
    // you can change this to change which element you replace 
    var reference = document.querySelector('td.something>div:first-child'); 
    var text = reference.innerText; 
    var replacement = text.replace(reference, "www.somewhere.com/q?=" + reference); 

    // create new anchor tag 
    var a = document.createElement('a'); 
    a.href = replacement; 
    a.innerText = text; 

    // do the replacement 
    reference.innerHTML = ''; // clear the old contents of the reference 
    reference.appendChild(a); // append the new anchor tag into the element 
})(); 
0

이것은 그리스 몽키 스크립트에 대한 매우 표준 작업입니다. jQuery's .wrapInner()DocwaitForKeyElements()Example 쉽게 만들 수 있습니다.

완전한 스크립트는 다음과 같습니다

// ==UserScript== 
// @name  _Select text (re)linker 
// @include http://YOUR_SERVER.COM/YOUR_PATH/* 
// @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js 
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js 
// @grant GM_addStyle 
// ==/UserScript== 
/*- The @grant directive is needed to work around a design change 
    introduced in GM 1.0. It restores the sandbox. 
*/ 
waitForKeyElements (".something > div", linkifyText); 

function linkifyText (jNode) { 
    jNode.wrapInner (function() { 
     var newHref = 'http:\/\/www.somewhere.com\/q?=' 
        + encodeURIComponent (this.textContent.trim()); 

     //-- Note that link text will be filled in automatically. 
     var newLink = '<a href="' + newHref + '"></a>'; 

     return newLink; 
    }); 
} 
관련 문제