2011-05-04 13 views
6

Başlık varlıklarında HTML varlıkları kullanmak mümkün değil mi?

Yukarıdaki ekran koruyucu Firefox'tur. İmleç, resmin sol tarafında sarı nokta üzerinde geziniyor. Bu bir <img> öğedir (aslında bir dairesel <area> öğesi içeren bir görüntü eşlemesiyle birlikte bir görüntüdür, ancak bu ayrımın önemsiz olduğunu varsayalım), bir başlık özniteliğinin uygulanması da dahil olmak üzere, JavaScript'te oluşturulmuş ve stil oluşturulmuştur. kesme ve yapıştırma dizgileri). Bunun nasıl davranacağını ve &ndash; yerine istenilen karakteri gösterecek şekilde nasıl gösterebilirim? InnerHTML için çalışır (ortadaki soldaki "Barrow-In-Furness" metni de JavaScript ve onun içHTML kümesi kullanılarak oluşturulan bir div.)

Düzenleme: Domenik soruya yanıt olarak: Burada

aşağıdaki
var StyleLinkMarker = function (LinkNumber, EltA, EltI) { 
    var AltText = LocationName[LinkStart[LinkNumber]] + 
        " to " + 
        LocationName[LinkEnd[LinkNumber]]; 
    if (!EltA) { 
     EltA = document.getElementById("link_marker_area" + LinkNumber); 
     EltI = document.getElementById("link_marker_img" + LinkNumber); 
    } 
    if (LinkStatus[LinkNumber] === 9) { 
     var CanBuyLinkCode = BoardPreviewMode ? 0 : CanBuyLink(LinkNumber); 
     if (CanBuyLinkCode === 0) { 
      EltI.src = ImagePath + "icon-buylink-yes.png"; 
      AltText += " (you can buy this " + LinkAltTextDescription + ")"; 
     } else { 
      EltI.src = ImagePath + "icon-buylink-no.png"; 
      AltText += " (you cannot buy this " + LinkAltTextDescription; 
      AltText += CanBuyLinkCode === 1 ? 
         ", because you aren't connected to it)" : 
         ", because you would have to buy coal from the Demand Track, and you can't afford to do that)"; 
     } 
    } else if (LinkStatus[LinkNumber] === 8 || 
       (LinkStatus[LinkNumber] >= 0 && LinkStatus[LinkNumber] <= 4) 
       ) { 
     EltI.src = ImagePath + "i" + LinkStatus[LinkNumber] + ".png"; 
     if (LinkStatus[LinkNumber] === 8) { 
      AltText += " (orphan " + LinkAltTextDescription + ")"; 
     } else { 
      AltText += " (" + 
         LinkAltTextDescription + 
         " owned by " + 
         PersonReference(LinkStatus[LinkNumber]) + 
         ")"; 
     } 
    } else { 
     throw "Unexpected Link Status"; 
    } 
    EltA.alt = AltText; 
    EltA.title = AltText; 
}; 

LocationName gibidir:

var LocationName = [ 
    "Barrow&ndash;In&ndash;Furness", "Birkenhead",    "Blackburn", "Blackpool", 
          "Bolton", "Burnley",      "Bury",  "Colne", 
        "Ellesmere Port", "Fleetwood",    "Lancaster", "Liverpool", 
        "Macclesfield", "Manchester",    "The Midlands", "Northwich", 
          "Oldham", "Preston",     "Rochdale", "Scotland", 
         "Southport", "Stockport", "Warrington &amp; Runcorn",  "Wigan", 
         "Yorkshire" 
]; 
+1

Eğer '–' iki kez gibi kodlanmış olmadığından emin misin : & ndash; ' – Mark

+0

Başlık özniteliğini nasıl ayarlıyorsunuz? Aşağıdakiler iyi çalışıyor: ' test edin' – Domenic

+0

@Mark: Çift kodlanmış olmadığından eminım. Özellikle, çift kodlanmış olsaydı, hedeflenen karakteri doğru görüntülemek yerine, HTML nesnesini tam olarak görüntülemek için görüntünün üst orta-solundaki koyu Verdana metnini de beklemeliyim. Çünkü div içeriği aynı JavaScript dizesinden oluşturulur. – Hammerite

cevap

5

Sen başlık atanması değildir niteliğini, inşa eder ve (başka işler gerçekleştirerek ek olarak) başlık niteliği uygular JavaScript işlevi olan sen (setAttribute yönteminin bir metin dizgesini de beklemesine rağmen) HTML'yi değil, metni beklediği özelliği başlığını ayarlama.

Genel olarak, DOM manipulasyonu ile uğraşırken, HTML değil metin sağlarsınız. .innerHTML, bu kuralın dikkate değer istisnasıdır.

+0

Anladım. Başlık özniteliğini nasıl ayarlayabilirim? – Hammerite

+0

Ebeveyn elemanının tüm içeriğini patlatıp innerHTML kullanarak değiştirerek. Bu iyi bir fikir değil. Verilerinizi HTML formatı yerine metin biçiminde alın. (Bunu bir yaklaşım olarak tavsiye etmeme rağmen, bir 'span'ın' innerHTML'sini ayarlayın ve daha sonra bu elementin 'firstChild'i olacak 'textNode'un' data'ını okuyun… ama HTML kodlama olmadan veriyi almak daha iyidir) – Quentin

+0

HTML yerine UTF-8 metnini kullanarak çalışmayı başarabildim. LocationName öğesinin diğer öğelerinin birindeki literal ve işareti öğesinin doğrulanamamasına neden olmasını bekledim, ancak bazı sihirlerin onu bir varlığa dönüştürdüğü anlaşılıyor. JavaScript içindeki HTML varlıklarına metin dönüştürmenin bir yolu yok mu? Böyle olması şaşırtıcı gibi görünüyor. – Hammerite

1

İşte metne HTML dönüştürmek için kolay bir yol:

function convertHtmlToText(value) { 
    var d = document.createElement('div'); 
    d.innerHTML = value; 
    return d.innerText; 
} 
Kodunuz sonra bu şekilde güncellenecektir olabilir

:

EltA.title = convertHtmlToText(AltText); 
+0

Bu inanılmaz pratik bir çözümdür, teşekkürler!Bunu yapmak için yerel bir yol yok, ama bu yöntem hakkında şık bir şey var. –

İlgili konular