2015-07-02 115 views
0

我想覆蓋我的CMS中的一些標準文本。用javascript覆蓋文本

<form accept-charset="UTF-8" action="/da-DK/listings" class="new_listing" 
    enctype="multipart/form-data" id="new_listing" method="post" 
    novalidate="novalidate"><div style="margin:0;padding:0;display:inline"> 
    <input name="utf8" type="hidden" value="✓"><input name="authenticity_token" type="hidden" 
    value="vvEeH5tHhuGME4jNDPhw0o4w8KoWpwgchgrU7xG/7LQ="></div> 
    <label class="input" for="listing_title">CHANGE THIS TEXT</label> 

我想改變它說「改變這個文本」使用JavaScript的文本。我知道非常基本的JavaScript,所以我希望這裏有人能幫助我。

我已經擁有能夠使用ID更改文本的代碼,但此標籤沒有ID,因此我不知道如何處理它。

謝謝你的時間。

該腳本只能發佈在整個站點的頭部(即使它只針對一個頁面)。

這是我對於ID工作等腳本:

<script> 

    var texts = []; 

    texts["new-listing-link"] = "NEW TEXT HERE"; 

    var interval = setInterval(function() { setText(); }, 100); 

    function setText() { 
    var textsCopy = texts.slice(); 
    for (var key in texts) { 
     var element = document.getElementById(key); 

     if (element != null) { 
      element.innerHTML = texts[key]; 
      delete texts[key]; 
     } 
    } 

    if (texts.length == 0) { 
     window.clearInterval(interval); 
    } 
    } 

    </script> 

我如何做呢? :) 我敢肯定,我只被允許使用JavaScript和jQuery的不

+0

Java是爲Javascript火腿是倉鼠 – Dragondraikk

+0

改變它使用類名,就像你做id – Karthigeyan

+0

@Dragondraikk只有那個conno 「Java」在JS的情況下故意;) –

回答

-1
var label = document.getElementsByTagName("label")[0] // If this is the first label of the page 
label.value = "new text"; 
+0

價值我認爲是一種財產而不是方法。 'x.value =「新標籤」;'它應該是這樣的。 –

+0

標籤元素也沒有value屬性 - 你可能會被jQueery –

0

腳本只能在整個網站的頭部貼(即使它是具體到一個英格爾頁) 。

這是我對於ID工作等腳本:

<script> 

    var texts = []; 

    texts["new-listing-link"] = "NEW TEXT HERE"; 

    var interval = setInterval(function() { setText(); }, 100); 

    function setText() { 
    var textsCopy = texts.slice(); 
    for (var key in texts) { 
     var element = document.getElementById(key); 

     if (element != null) { 
      element.innerHTML = texts[key]; 
      delete texts[key]; 
     } 
    } 

    if (texts.length == 0) { 
     window.clearInterval(interval); 
    } 
    } 

    </script> 

我如何做呢? :) 我敢肯定,我只被允許使用JavaScript和jQuery的不

+0

搞糊塗,而不是document.getElementById(key) - > use document.getElementsByTagName [「label」]。注意:這將返回一個數組。索引該數組取決於所需的任何標籤。 – raj454raj

1

這裏的另一種方式,沒有必要改變你有什麼

document.querySelector('label[for=listing_title]').innerHTML = 'New Label'; 

沒有jQuery的膨脹,沒有經過摸索數組,快速簡單

querySelector與jQuery一樣工作,但它具有本地速度和零膨脹。

label [for = listing_title]找到具有值「listing_title」的屬性「for」的標籤...因此,雖然不能保證是唯一的,但很多表單都有多個標籤「for」輸入

var texts = {}; // note {} not [] 
texts["label[for=listing_title]"] = "NEW TEXT"; 
var interval = setInterval(function() { 
    setText(); 
}, 100); 

function setText() { 
    var textsCopy = texts.slice(); // why??? 
    for (var key in texts) { 
     var element = document.querySelector(key); 
     if (element != null) { 
      element.innerHTML = texts[key]; 
      delete texts[key]; 
     } 
    } 
    if (texts.length == 0) { 
     window.clearInterval(interval); 
    } 
} 

使用上述版本,您可以混合使用ID以及更復雜的選擇器...

var texts = { 
    "label[for=listing_title]": "NEW TEXT", 
    "#new-listing-link": "NEW TEXT HERE" 
}; // declare the text object in one go 

var interval = setInterval(setText, 100); // this is equivalent (not exactly identical, but functionally identical to your code 
// rest of your code 
+0

謝謝Jaromanda。這說得通。我不知道如何在腳本中正確插入它。我很抱歉我的愚蠢的問題,但我很新 – Camilla

+0

@Camilla - 我看你的問題沒有腳本,所以我害怕我不能幫助 –

+0

它在評論。它是我用來更改另一個可以通過ID更改的文本的腳本。 – Camilla

0

這應該這樣做:那麼,你原有的替換,可以在相同的循環由ID

另一個提示或兩個前加入

texts["#new-listing-link"] = "NEW TEXT HERE"; 

注意「#」要做的事招(quick'n'dirty):

slice=Function.prototype.call.bind([].slice); 
slice(document.querySelectorAll(".input")).map(function(x){ return x.textContent="Killroy was here"; }); 

檢查Fiddle

MDN上Array.prototype.slice()

MDN上Array.prototype.map()

MDN上Document.querySelectorAll()

如果你只需要這個標籤,選擇:label[for=listing_title]在Jaromanda兩個X答案