Saya mendapatkan rentang dengan data dinamis di halaman saya, dengan ellipsis
gaya.
.my-class
{
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
width: 71px;
}
<span id="myId" class="my-class"></span>
document.getElementById('myId').innerText = "...";
Saya ingin menambahkan tooltip elemen ini dengan konten yang sama, tapi saya ingin itu muncul hanya ketika kontennya panjang dan elipsis muncul di layar.
Apakah ada cara untuk melakukannya?
Apakah browser membuat acara saat ellipsis
diaktifkan?
* Browser: Internet Explorer
text-overflow:ellipsis;
itu tidak berfungsi sama sekali di Firefox - lihat pertanyaan ini untuk lebih lanjut: stackoverflow.com/questions/4927257/…element.offsetWidth < element.scrollWidth
sesuai jawaban ini tampaknya berhasil sejauh ini.text-overflow:ellipsis;
sekarang berfungsi di Firefox; itu ditambahkan di Firefox 7 (dirilis September 2011).Jawaban:
Inilah cara yang melakukannya menggunakan pengaturan elipsis bawaan, dan menambahkan
title
atribut berdasarkan permintaan (dengan jQuery) berdasarkan komentar Martin Smith:sumber
"As of jQuery 1.7, the .on() method is the preferred method for attaching event handlers to a document"
untuk info lebih lanjut lihat api.jquery.com/bind dan api.jquery.com/onInilah solusi CSS murni. Tidak perlu jQuery. Itu tidak akan menunjukkan tooltip, melainkan hanya akan memperluas konten secara penuh pada mouseover.
Bekerja dengan baik jika Anda memiliki konten yang diganti. Maka Anda tidak harus menjalankan fungsi jQuery setiap saat.
sumber
Jawaban uosɐſ pada dasarnya benar, tetapi Anda mungkin tidak ingin melakukannya di acara mouseenter. Itu akan menyebabkannya melakukan perhitungan untuk menentukan apakah itu diperlukan, setiap kali Anda mengarahkan mouse ke elemen. Kecuali jika ukuran elemen berubah, tidak ada alasan untuk melakukan itu.
Akan lebih baik untuk langsung memanggil kode ini segera setelah elemen ditambahkan ke DOM:
Atau, jika Anda tidak tahu kapan tepatnya itu ditambahkan, panggil kode itu setelah halaman selesai dimuat.
jika Anda memiliki lebih dari satu elemen yang perlu Anda lakukan dengan ini, maka Anda dapat memberi mereka semua kelas yang sama (seperti "mightOverflow"), dan menggunakan kode ini untuk memperbarui semuanya:
sumber
$(".mightOverflow").each(function() { if( $(this).offsetWidth < $(this).scrollWidth && !$(this).attr('title')){ $(this).attr('title', $(this).text()); $(this).css('border-bottom', '1px dotted #A8A8A8'); } });
this.offsetWidth < this.scrollWidth
dan mungkin bahkan pemeriksaan!$this.attr('title')
akan dilakukan setiap kali Anda mengarahkan mouse ke elemen.Berikut adalah dua solusi CSS murni lainnya:
sumber
Ini plugin jQuery saya:
Pemakaian:
Edit:
Saya telah membuat inti untuk plugin ini. https://gist.github.com/UziTech/d45102cdffb1039d4415
sumber
Kita perlu mendeteksi apakah ellipsis benar-benar diterapkan, kemudian menunjukkan tooltip untuk mengungkapkan teks lengkap. Tidak cukup hanya dengan membandingkan "
this.offsetWidth < this.scrollWidth
" ketika elemen hampir memegang kontennya tetapi hanya kurang satu atau dua piksel lebarnya, terutama untuk teks karakter Cina / Jepang / Korea lebar lebar.Berikut ini sebuah contoh: http://jsfiddle.net/28r5D/5/
Saya menemukan cara untuk meningkatkan deteksi ellipsis:
this.offsetWidth < this.scrollWidth
" dulu, lanjutkan langkah # 2 jika gagal.Ini peningkatan saya: http://jsfiddle.net/28r5D/6/
sumber
Saya membuat plugin jQuery yang menggunakan tooltip Bootstrap alih-alih tooltip bawaan browser. Harap dicatat bahwa ini belum diuji dengan browser yang lebih lama.
JSFiddle: https://jsfiddle.net/0bhsoavy/4/
sumber
Inilah yang saya lakukan. Sebagian besar skrip tooltip mengharuskan Anda untuk menjalankan fungsi yang menyimpan tooltips. Ini adalah contoh jQuery:
Jika Anda tidak ingin memeriksa elipsis css, Anda dapat menyederhanakannya seperti:
Saya memiliki "kapan" di sekitarnya, sehingga fungsi "setupTooltip" tidak dijalankan sampai semua judul telah diperbarui. Ganti "setupTooltip", dengan fungsi tooltip Anda dan * dengan elemen yang ingin Anda periksa. * Akan melalui mereka semua jika Anda meninggalkannya.
Jika Anda hanya ingin memperbarui atribut judul dengan tooltip browser, Anda dapat menyederhanakan seperti:
Atau tanpa memeriksa elipsis:
sumber
Jika Anda ingin melakukan ini hanya menggunakan javascript, saya akan melakukan hal berikut. Berikan rentang atribut id (sehingga dapat dengan mudah diambil dari DOM) dan tempatkan semua konten dalam atribut bernama 'konten':
Kemudian, dalam javascript Anda, Anda dapat melakukan hal berikut setelah elemen dimasukkan ke DOM.
Tentu saja, jika Anda menggunakan javascript untuk memasukkan rentang ke DOM, Anda bisa menyimpan konten dalam variabel sebelum memasukkannya. Dengan cara ini Anda tidak perlu atribut konten pada rentang tersebut.
Ada solusi yang lebih elegan dari ini jika Anda ingin menggunakan jQuery.
sumber
$("#myDataId").attr("title", function() { var innerText = $(this).text(); var content = $(this).attr("content"); if (innerText.length <= content.length) { return content; } return null; });
Saya memiliki kelas CSS, yang menentukan di mana harus meletakkan ellipsis. Berdasarkan itu, saya melakukan hal berikut (set elemen bisa berbeda, saya menulis itu, di mana elipsis digunakan, tentu saja itu bisa menjadi pemilih kelas yang terpisah):
sumber
this
adalahanchor
jadi saya menggunakanthis.text()
bukannyaval()
Inilah solusi Vanilla JavaScript:
sumber
Ini solusi saya, berfungsi sebagai pesona!
sumber
Tidak ada solusi di atas yang berfungsi untuk saya, tetapi saya menemukan solusi yang bagus. Kesalahan terbesar yang dilakukan orang adalah memiliki semua 3 properti CSS yang dideklarasikan pada elemen setelah pageload. Anda harus menambahkan gaya-gaya + tooltip secara dinamis JIKA dan HANYA JIKA rentang yang Anda inginkan elips lebih lebar daripada induknya.
sumber
Anda mungkin dapat mengelilingi rentang dengan rentang lain, kemudian cukup menguji apakah lebar rentang asli / dalam lebih besar dari rentang baru / rentang luar. Perhatikan bahwa saya katakan mungkin - ini didasarkan pada situasi saya di mana saya memiliki bagian
span
dalamtd
jadi saya tidak benar-benar tahu bahwa jika itu akan bekerja dengan bagianspan
dalamspan
.Namun di sini adalah kode saya untuk orang lain yang mungkin menemukan diri mereka dalam posisi yang mirip dengan milik saya; Saya menyalin / menempelnya tanpa modifikasi walaupun itu dalam konteks Angular, saya tidak berpikir itu mengurangi keterbacaan dan konsep penting. Saya mengkodekannya sebagai metode layanan karena saya perlu menerapkannya di lebih dari satu tempat. Pemilih yang saya lewati telah menjadi pemilih kelas yang akan cocok dengan banyak instance.
sumber