Javascript code to find a text on page and jump to it - javascript

there exist similar questions but not quite. This must be easy as well.
Say I've got a large page full of Lorem Ipsum stuff, no div's or p's or any other <>'s - don't want them coz the text is to be wieved with a plain-text editor also, so I want just plain text with br's at most. Nevertheless, to separate sections I use a repeating string such as <br>------------------<br>. What would be a simple JS code (no jQuery if possible) to find the 1st, 2nd, 3rd etc. occurrance of this string on the page or div and then jump to it in such a way it appears on the bottom of the page, not top. I plan to use it in my nav, use addEventListener on nav elements linking to specific sections of the page, to be found by this <br>------------------<br> string. Thank you very much.

I used the JavaScript's Element.prototype.scrollIntoView function as shown below:
document.getElementById("holder").innerHTML = document.getElementById("holder").innerHTML.replace(/------------------/g, "<span class='sections-seper'>------------------</span>");
var choice = parseInt(prompt("Which section would you like to go to?", "Number"));
document.getElementsByClassName("sections-seper")[(choice - 1)].scrollIntoView(true);
#holder {
font-size: 25px;
}
<div id='holder'>
------------------
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam sodales dolor velit, in accumsan diam auctor et. Cras malesuada dui sem, non ultrices purus tristique eu. Aenean eu nunc eu lacus tincidunt aliquam. Etiam eget ex libero. Pellentesque et tortor a neque dictum maximus ac eu metus. Nunc laoreet justo in purus lobortis interdum eu sit amet dui. Curabitur et odio in lacus pellentesque porta.
------------------
Suspendisse imperdiet justo vel sapien commodo consequat. Mauris pharetra vulputate bibendum. Vivamus fringilla porta lorem, et tincidunt urna tincidunt nec. Integer lobortis, erat non convallis sagittis, mauris sapien venenatis ligula, eu facilisis est dolor congue odio. Curabitur at diam et sem semper eleifend ac vitae lacus. Vivamus a aliquam nunc, in fringilla risus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Quisque aliquam libero massa, ut pharetra purus ullamcorper ut. Nullam felis leo, finibus sed justo ac, feugiat interdum libero. Cras accumsan bibendum lectus. Cras sollicitudin, augue at fringilla elementum, nulla orci porta massa, ut condimentum lacus massa in elit. Aliquam ut urna ultrices, suscipit metus ac, aliquam mauris.
------------------
Maecenas ac gravida purus. Sed sem nisi, accumsan nec placerat eu, luctus ut nunc. Proin et hendrerit quam. Maecenas sapien orci, pharetra ut diam non, tristique finibus nisl. Curabitur venenatis viverra euismod. Proin vel lacus eu tortor fringilla porttitor eget eget quam. Sed eu rutrum enim. Donec sit amet vestibulum urna, eu cursus eros.
</div>

Related

Section breaks for very long CSS columns

Using CSS columns I can format contiguous data into columns without having to manually break it into sections. This is especially useful when displaying complex, dynamic content.
However when the columns' content is so long that their height is greater than the viewport, dividing into columns makes for a poor reading experience. When the reader reaches the bottom of one column they must manually scroll up to begin reading the next.
In traditional print layouts, readability issues with very long columns are generally mitigated by breaking the columns into sections that 'restart' the column. (Physical pages themselves form a natural separation that the endlessly scrolling webpage does not have). The image below shows how horizontal section breaks makes columnar content that is longer than the height of the viewport more readable.
(Note that by 'restart the columns' I mean that once you reach the end of a left-hand column section you then read the right-hand column of that section before scrolling down to read both columns of the next section. https://www.shutterstock.com/image-vector/newspaper-template... might illustrate it more clearly).
There are very few guarantees for the column content. It may contain any number of paragraphs, images, nested block elements, nested inline elements and so on. Example markup is shown below.
.columns {
columns: 2 200px;
}
.columns * {
max-width: 100%;
}
<div class="columns">
<div class="introduction">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas posuere dictum tincidunt. Cras in lectus eget libero suscipit venenatis at sit amet dolor. Donec tempor cursus justo, volutpat sodales dolor tempor eu.</p>
<p class="a-class">Pellentesque nec tempor sapien, sed vehicula sem. Ut pretium leo eget nisi cursus viverra. Ut ultrices porta nibh, sed laoreet felis condimentum sit amet. Aliquam a felis nec urna dignissim placerat sed sit amet elit. Donec elementum sagittis purus, facilisis convallis urna dapibus eu. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam erat volutpat. Phasellus vel placerat metus. In efficitur enim eget lacinia ultrices. Duis ultricies dignissim nisi, id ultricies nulla venenatis vitae.</p>
</div>
<img src="https://i.kym-cdn.com/entries/icons/original/000/016/546/hidethepainharold.jpg">
<div class="body" style="">
<p>Suspendisse quis ante ullamcorper, lobortis orci ut, vestibulum dolor. Aenean sit amet purus commodo, sagittis leo vel, consequat nisi. Vestibulum sit amet sem vitae sapien pulvinar finibus. Ut sapien purus, luctus condimentum iaculis quis, lobortis at elit. Cras nulla ante, scelerisque ut aliquet in, elementum vel turpis. Vestibulum ipsum magna, congue sit amet sodales vel, aliquam vel nunc. <img src="https://upload.wikimedia.org/wikipedia/commons/e/e0/SNice.svg" width="100"> Sed eu dapibus nulla. In ut libero sit amet elit elementum gravida. Suspendisse quis quam consequat, pretium felis vel, laoreet turpis. Proin fringilla lobortis magna. Duis quam sapien, sodales nec accumsan id, ullamcorper eget tellus. Aliquam vitae orci cursus, porttitor ligula ut, fringilla odio. Donec a lorem ac eros interdum varius ultricies quis nulla.</p>
</div>
<p contenteditable="true">Nunc in elit tincidunt, ultrices massa sed, ultricies elit. In nec accumsan metus. Nullam ultricies eget tortor ut malesuada. Fusce in elit sit amet dolor bibendum malesuada.</p>
<div style="display:none">
<p>Curabitur sed hendrerit massa, vitae porta enim.</p>
</div>
<div><div><span>hey</span><div id="an-id">
Nullam ultricies eget tortor ut malesuada. Fusce in elit sit amet dolor bibendum malesuada. Nulla sed nisi vel nulla aliquam blandit. Nam vel tellus ut libero ultrices volutpat. Curabitur blandit quis arcu rutrum ullamcorper. Cras et pharetra augue, eget eleifend sem.
<img src="https://socialnewsdaily.com/wp-content/uploads/2018/08/Webp.net-resizeimage-27.jpg">
</div></div></div>
<p>
Mauris accumsan condimentum porttitor. Quisque tellus justo, suscipit sit amet posuere in, scelerisque nec orci. Aenean iaculis nisi in porta viverra. Sed eget ultricies nibh. Donec accumsan laoreet interdum. Donec risus mauris, dapibus et pulvinar at, posuere non nisi. Mauris at viverra nunc. Ut laoreet suscipit erat et cursus. Aenean id lacus volutpat lectus condimentum posuere. Nam ut lectus elit. Morbi sagittis elementum libero. Donec congue dolor sed tristique efficitur.
</p>
<p>
<div>
<p>Sed elementum velit sapien, et tristique justo bibendum at. Aliquam tincidunt magna nec nisi congue varius. Etiam dolor eros, rhoncus quis purus a, tempus malesuada quam. Sed bibendum condimentum eros vitae varius. Donec fermentum magna vel tellus tempus, nec finibus neque fermentum. Mauris tempus nisl sit amet lacus fermentum, at egestas urna egestas.</p>
<p>Interdum et malesuada fames ac ante ipsum primis in faucibus. Suspendisse ultrices lectus vitae nisl congue, sed porta dolor luctus. Donec aliquet at sapien sit amet tincidunt. Mauris vestibulum consectetur augue at imperdiet.</p>
</div>
</p>
</div>
I would like to automatically break my columns into regular sections after the columns reach a maximum height, as in the image above.
I have not found any property that controls the layout of CSS columns in this way. CSS regions look promising but have very poor browser support.
Computing the height of content with JavaScript and then inserting wrappers for each column block is probably possible, but not ideal. The content is dynamic and may change at any time, meaning the function must be run on every change. In addition the content may be very complex with sub elements that need to traverse section breaks, so naively inserting wrappers for each section will likely break the layout.
How can I automatically set section breaks for columnar content after a maximum height? (I am not married to the idea of CSS columns; perhaps a creative use of flex or inline-block will give the result I need).
There's actually a pretty simple solution using CSS columns. And the column-span attribute.
You can achieve all of this WITHOUT injecting anything into the content and simply styling HTML tags.
Basically, the CSS Columns Layout Module is intended to replicate print design layouts (like a newspaper) where the stylistic rule is that headlines should cross all columns of a story. Therefore any element with column-span: all will separate columns and cause the wrapping to reset. (notice the colors in my example show the wrap).
In this case, since you don't control the content its best to provide a common structure to your users. For example, I'd set H1, H2, H3 tags as well as <hr> and maybe some images to break columns. Allow your users to implement these tags as they normally would in writing and you'll achieve a nice layout. However, if they decide NOT to implement any of that stuff, that's up to them and you should let it wrap and cause a long scroll. (I might also suggest providing a preview so they can see what the result will look like)
Example of column-span
.columns {
margin: 30px;
columns: 2;
}
h1, h2, h3, h4, h5 {
column-span: all;
}
// simply to show where things wrap
h2 {
background-color: #eee;
padding: 5px 10px;
}
h5 {
border-bottom: 1px solid #ddd;
padding-bottom: 5px;
text-align: center;
}
p:nth-of-type(1) {
color: blue;
}
p:nth-of-type(2) {
color: green;
}
p:nth-of-type(3) {
color: orange;
}
p:nth-of-type(4) {
color: teal;
}
<div class="columns">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras venenatis tellus non nunc tincidunt, vitae rutrum metus dapibus. Fusce at ante massa. Nam et nibh aliquet, porta nibh quis, rhoncus tortor. Aenean vestibulum neque sed urna lacinia aliquet.
Vestibulum facilisis egestas commodo. Cras sed maximus odio. Mauris posuere, ante id posuere facilisis, ligula libero consectetur lacus, at pellentesque nibh elit at magna. Proin sollicitudin quis nibh at viverra. Duis feugiat, lorem vitae facilisis
blandit, augue tortor cursus orci, sed porttitor eros elit at sapien. Quisque eleifend pulvinar pellentesque.
</p>
<h2>This is a header (h2) with column-span: all set on it</h2>
<p>
Donec blandit sapien leo, id aliquam purus vulputate a. Sed vel turpis ut eros suscipit blandit vel id eros. Nullam ut mauris luctus magna sollicitudin venenatis. Pellentesque leo mauris, malesuada nec purus ut, vestibulum malesuada lectus. Nullam ultricies
tellus sapien, ut fermentum risus pretium a. Nullam magna urna, ullamcorper non congue a, efficitur nec orci. Ut aliquam molestie nisi. In at accumsan purus. Etiam non tempor ipsum. Maecenas gravida mauris in nibh vehicula ullamcorper. Sed libero lorem,
faucibus eu lorem ut, gravida eleifend enim. Nunc vehicula fermentum consequat. Phasellus a pellentesque nisl. Nulla vel suscipit nibh, ac cursus dui. Suspendisse elementum dapibus risus. Nam egestas congue finibus.
</p>
<p>
Nunc vel risus nec nulla dignissim congue. Cras sit amet lacus nec nisl mollis pellentesque in vel purus. Suspendisse efficitur mollis nibh, congue facilisis libero auctor ac. Nulla facilisi. Etiam ut erat eget erat egestas suscipit. Curabitur vitae varius
mauris. Sed accumsan diam eros, id dapibus metus rutrum at. Nunc vitae pretium massa. Aenean quis mauris leo. Nulla egestas ligula eu libero interdum feugiat. Aliquam maximus erat et tortor auctor varius. Nulla in pharetra leo, vel suscipit nunc. Orci
varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec nec egestas ante, vitae sollicitudin arcu. Pellentesque posuere tempus nibh, nec tempus eros pellentesque ac.
</p>
<p>
Curabitur tempus massa dolor, nec congue purus efficitur id. Phasellus a dictum mauris. In porta nulla lectus, pretium semper erat semper id. Fusce ornare fringilla mi, ut auctor tortor semper non. Aliquam sed felis fermentum, molestie dolor vel, eleifend
diam. Donec accumsan bibendum mi, sed pretium tortor pulvinar nec. Aliquam et metus accumsan, pretium neque eu, elementum ipsum. Nam dapibus risus sed velit viverra, non consequat nibh pretium. Morbi nec gravida turpis. Quisque convallis justo ut rhoncus
porttitor. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
</p>
<h5>This is a header (h5) with column-span: all set on it</h5>
<p>
Proin fringilla, sapien molestie mattis commodo, leo ligula viverra massa, eget semper leo purus sit amet est. Quisque eu diam interdum, pretium dui sed, dictum sem. Sed cursus eu est in ultrices. Suspendisse eleifend imperdiet lectus eu consectetur.
Duis semper libero nec magna commodo, sollicitudin pharetra magna luctus. Fusce pellentesque sollicitudin dolor, eu scelerisque elit condimentum vel. Curabitur id condimentum nisi, eu rhoncus arcu. Proin metus purus, condimentum nec semper vitae, blandit
at leo. Proin commodo et ipsum ac euismod. Aliquam erat volutpat. Nam neque nisi, ornare sit amet metus ac, faucibus tempor nulla. Quisque tristique malesuada finibus. Praesent fermentum posuere urna, a blandit risus sollicitudin nec.
</p>
</div>
Using 'break-inside: avoid;' each paragraph
In the solution I attached, I gave each DIV a break-avoid class to avoid breaking in the middle of the paragraph.
Like you asked, if the paragraph is not over yet you can scroll down. I added a gray color that you can see in the paragraphs.
You can control when it will break and you can also insert a div into a div if you want it in sequence.
Hope the solution is effective for you.
.columns {
columns: 5 250px;
}
.columns * {
max-width: 100%;
}
.break-avoid{
break-inside: avoid;
background-color: #ccc;
}
<div class="columns">
<div class="introduction break-avoid">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas posuere dictum tincidunt. Cras in lectus eget libero suscipit venenatis at sit amet dolor. Donec tempor cursus justo, volutpat sodales dolor tempor eu.</p>
<p class="a-class">Pellentesque nec tempor sapien, sed vehicula sem. Ut pretium leo eget nisi cursus viverra. Ut ultrices porta nibh, sed laoreet felis condimentum sit amet. Aliquam a felis nec urna dignissim placerat sed sit amet elit. Donec elementum sagittis purus, facilisis convallis urna dapibus eu. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam erat volutpat. Phasellus vel placerat metus. In efficitur enim eget lacinia ultrices. Duis ultricies dignissim nisi, id ultricies nulla venenatis vitae.</p>
</div>
<img src="https://i.kym-cdn.com/entries/icons/original/000/016/546/hidethepainharold.jpg">
<div class="body break-avoid" style="">
<div>
<p>Suspendisse quis ante ullamcorper, lobortis orci ut, vestibulum dolor. Aenean sit amet purus commodo, sagittis leo vel, consequat nisi. Vestibulum sit amet sem vitae sapien pulvinar finibus. Ut sapien purus, luctus condimentum iaculis quis, lobortis at elit. Cras nulla ante, scelerisque ut aliquet in, elementum vel turpis. Vestibulum ipsum magna, congue sit amet sodales vel, aliquam vel nunc.Suspendisse quis ante ullamcorper, lobortis orci ut, vestibulum dolor. Aenean sit amet purus commodo, sagittis leo vel, consequat nisi. Vestibulum sit amet sem vitae sapien pulvinar finibus. Ut sapien purus, luctus condimentum iaculis quis, lobortis at elit. Cras nulla ante, scelerisque ut aliquet in, elementum vel turpis. Vestibulum ipsum magna, congue sit amet sodales vel, aliquam vel nunc.Suspendisse quis ante ullamcorper, lobortis orci ut, vestibulum dolor. Aenean sit amet purus commodo, sagittis leo vel, consequat nisi. Vestibulum sit amet sem vitae sapien pulvinar finibus. Ut sapien purus, luctus condimentum iaculis quis, lobortis at elit. Cras nulla ante, scelerisque ut aliquet in, elementum vel turpis. Vestibulum ipsum magna, congue sit amet sodales vel, aliquam vel nunc.Suspendisse quis ante ullamcorper, lobortis orci ut, vestibulum dolor. Aenean sit amet purus commodo, sagittis leo vel, consequat nisi. Vestibulum sit amet sem vitae sapien pulvinar finibus. Ut sapien purus, luctus condimentum iaculis quis, lobortis at elit. Cras nulla ante, scelerisque ut aliquet in, elementum vel turpis. Vestibulum ipsum magna, congue sit amet sodales vel, aliquam vel nunc. <img src="https://upload.wikimedia.org/wikipedia/commons/e/e0/SNice.svg" width="100"> Sed eu dapibus nulla. In ut libero sit amet elit elementum gravida. Suspendisse quis quam consequat, pretium felis vel, laoreet turpis. Proin fringilla lobortis magna. Duis quam sapien, sodales nec accumsan id, ullamcorper eget tellus. Aliquam vitae orci cursus, porttitor ligula ut, fringilla odio. Donec a lorem ac eros interdum varius ultricies quis nulla.</p>
</div>
</div>
<p class="break-avoid" contenteditable="true">Nunc in elit tincidunt, ultrices massa sed, ultricies elit. In nec accumsan metus. Nullam ultricies eget tortor ut malesuada. Fusce in elit sit amet dolor bibendum malesuada.</p>
<div style="display:none;" class="break-avoid">
<p>Curabitur sed hendrerit massa, vitae porta enim.</p>
</div>
<div class="break-avoid"><div><span>hey</span><div id="an-id">
Nullam ultricies eget tortor ut malesuada. Fusce in elit sit amet dolor bibendum malesuada. Nulla sed nisi vel nulla aliquam blandit. Nam vel tellus ut libero ultrices volutpat. Curabitur blandit quis arcu rutrum ullamcorper. Cras et pharetra augue, eget eleifend sem.
<img src="https://socialnewsdaily.com/wp-content/uploads/2018/08/Webp.net-resizeimage-27.jpg">
</div></div></div>
<div class="break-avoid">
<p>
Mauris accumsan condimentum porttitor. Quisque tellus justo, suscipit sit amet posuere in, scelerisque nec orci. Aenean iaculis nisi in porta viverra. Sed eget ultricies nibh. Donec accumsan laoreet interdum. Donec risus mauris, dapibus et pulvinar at, posuere non nisi. Mauris at viverra nunc. Ut laoreet suscipit erat et cursus. Aenean id lacus volutpat lectus condimentum posuere. Nam ut lectus elit. Morbi sagittis elementum libero. Donec congue dolor sed tristique efficitur.
</p>
</div>
<div class="break-avoid">
<p>Sed elementum velit sapien, et tristique justo bibendum at. Aliquam tincidunt magna nec nisi congue varius. Etiam dolor eros, rhoncus quis purus a, tempus malesuada quam. Sed bibendum condimentum eros vitae varius. Donec fermentum magna vel tellus tempus, nec finibus neque fermentum. Mauris tempus nisl sit amet lacus fermentum, at egestas urna egestas.</p>
<p>Interdum et malesuada fames ac ante ipsum primis in faucibus. Suspendisse ultrices lectus vitae nisl congue, sed porta dolor luctus. Donec aliquet at sapien sit amet tincidunt. Mauris vestibulum consectetur augue at imperdiet.</p>
</div>
</div>

How to get nicEdit Text area height?

I am using nicEdit for a project, I have a problem as my project is completely dynamic the client wants, when they copy paste any text to the nicEdit text editor the div has to auto resize, for that I need the to find the height of which i am not able to get. I have done a jsFiddle
I have not used any jquery to find the height thinking it might conflict with nicEdit script file
<div id="StatusEntry" rows=10 cols=50 contenteditable="true">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc,
</div>
This is just the html i have used. Please anyone can help me on this would be thankfull.
Thanks in advance
you can get div height by using js as like this
var height=$('#StatusEntry').height();
var height=$('#StatusEntry').height();
$div.on('resize',function(){
clearTimeout(timer);
timer = setTimeout(function(){
$("#StatusEntry").height(height());
});
});``

Bootstrap Panel slideToggle

I am trying to use panels to display information, showing a snippet of the text and then sliding down in order to see the "detail" view. The code I currently have nearly works, but is hardly elegant. Here is my code (JSFiddle)
The span element doesn't seem to be working quite properly. Also, I was wondering if there is a way to show there is more text to see with a sort of "fade to the bottom of the panel"? In addition my Javascript is functional but not great. Plus, how can I implement an icon in the panel heading similar to a ">"? Is there a way to avoid the first line of my code?
$(".full").hide();
$(document).on("click", "#expander", function () {
$(".full").slideToggle();
$(".moreLink").toggle();
});
Try something like this...
CSS:
.panel-body {
text-overflow: ellipsis;
height: 40px;
}
JS:
$(document).on("click", ".panel-body", function () {
$(".panel-body").slideDown({height: "800px"}, 1000);
});
HTML:
<div class="panel-body">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. In turpis sapien,lobortis eget metus non, malesuada aliquet sapien. Pellentesque aliquet elit vitae nibh tempor, id euismod justo etum. Aenean urna quam, ornare ac mattis sit amet, auctor vel sem. Maecenas eu mattis enim. Vestibulum varius eros laoreet lorem tempus, vitae faucibus tellus mattis. Donec elementum ipsum eu tempus consequat. Etiam vestibulum dolor mi, sit amet euismod tortor scelerisque ullamcorper. Nam tristique metus sit amet feugiat sollicitudin.
Sed laoreet sed elit et scelerisque. In iaculis magna dictum orci sagittis, vitae tempus mi sodales. Mauris ut tortor quis nunc pulvinar rutrum non sed metus. Etiam varius rutrum mi, non mollis justo euismod in. Nam quis purus felis. Etiam porttitor tempor lacus. Praesent tristique nisi eu cursus molestie. Vestibulum ullamcorper massa neque, eget placerat justo feugiat nec. Duis at ligula non diam sagittis suscipit in id enim. Nam ut orci sed risus fermentum pulvinar. Sed erat elit, porta sed ligula vel, vulputate lobortis urna. Quisque dictum aliquam nibh, interdum posuere dolor pellentesque in. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras enim ligula, rhoncus non dignissim nec, sollicitudin et neque.
Donec lacus neque,

How come dynamically assigning a name using javascript fails?

I am trying to dynamically assign a name attribute to a level 2 header using jQuery.
http://jsfiddle.net/8ZTEb/
Here is my javascript:
$(function() {
$("h2").each(function() {
$(this).attr("name", $(this).html().toLowerCase());
});
});​
Here is my long, but simple HTML.
Bar
<h2>Foo</h2>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam eu sollicitudin urna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In tincidunt magna vel quam auctor sit amet tincidunt lacus euismod. Praesent bibendum odio nec nisl tempus dictum. Cras aliquet condimentum est luctus accumsan. Aenean lectus lacus, malesuada eu dictum eu, euismod ac purus. Aliquam ultrices egestas elit, nec scelerisque lorem suscipit in. In auctor bibendum ullamcorper. Aenean lectus arcu, fermentum sed aliquet quis, tristique vestibulum est. In nisi ligula, consequat non semper vitae, pharetra vel risus. Nulla odio augue, tincidunt quis bibendum id, ullamcorper vel eros. Proin feugiat imperdiet tellus, ut porttitor massa eleifend in. Praesent sed nisl sed dui vestibulum auctor. Maecenas viverra feugiat erat adipiscing porttitor. Aenean mattis tincidunt placerat.
</p>
<p>
Fusce aliquam, dui a facilisis porttitor, nisi dolor semper dolor, ac vestibulum elit lorem id lorem. Nam ut odio eros. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse consequat tempor volutpat. Vestibulum cursus purus et nulla dignissim suscipit. Cras convallis dolor nec dolor volutpat vel rutrum magna eleifend. Nullam eget lorem orci. Vestibulum vel aliquam ligula.
</p>
<p>
Aliquam in tellus odio, ut gravida ante. Vestibulum vitae diam elementum dui ultricies hendrerit quis vitae ante. Vestibulum vel metus metus. Nulla in nulla et risus dictum lobortis at ac ligula. Nunc in dolor id sapien facilisis porttitor id vitae magna. Integer pretium faucibus felis, vitae tristique est condimentum egestas. Suspendisse potenti. Duis auctor molestie sapien, sed vestibulum dolor ornare in. Praesent lacus purus, luctus non suscipit eget, aliquet in nunc. Etiam bibendum, erat ut blandit vehicula, augue diam vestibulum ipsum, ut imperdiet libero est sit amet tortor. Quisque gravida porttitor augue, eu hendrerit libero ullamcorper eget. Sed at tortor nisi, a luctus nunc. Curabitur in fringilla velit. Nulla elementum hendrerit ante ac faucibus. Mauris ultrices pretium erat sit amet scelerisque.
</p>
<p>
Integer dictum diam vel orci laoreet vehicula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec eu commodo dui. Quisque a diam mauris. Curabitur ornare sollicitudin ligula, in fringilla ligula porttitor et. Proin bibendum tincidunt orci, eget iaculis sem venenatis et. Integer eu eros magna, sed placerat augue. Cras eget est purus. Duis convallis gravida tempus. Curabitur a dolor ut nisl sodales rutrum. Maecenas eget diam quis turpis scelerisque mattis eget ac sapien. Sed commodo mattis tellus, sit amet tempor ligula placerat at.
</p>
<p>
Sed ornare faucibus tincidunt. Sed suscipit metus a massa feugiat dignissim. Maecenas auctor vulputate placerat. Vivamus pulvinar pharetra tincidunt. Nunc tempus ornare interdum. Vestibulum vitae magna lorem, quis luctus augue. Phasellus quam leo, dignissim vitae semper a, iaculis et lacus. Sed elit nunc, interdum sit amet dictum vitae, fermentum eget lorem. Phasellus nisi dui, varius ut lacinia et, condimentum sed tortor. Fusce eu orci et justo rutrum varius sit amet quis enim. Suspendisse id urna eget odio pellentesque lacinia in ut neque. Vestibulum ante lectus, placerat ac mattis vitae, tincidunt quis tortor. Morbi vel sem ut quam dignissim faucibus ut eu lorem. Aliquam laoreet arcu nec urna eleifend consectetur. Suspendisse potenti.
</p>
<h2>Bar</h2>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam eu sollicitudin urna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In tincidunt magna vel quam auctor sit amet tincidunt lacus euismod. Praesent bibendum odio nec nisl tempus dictum. Cras aliquet condimentum est luctus accumsan. Aenean lectus lacus, malesuada eu dictum eu, euismod ac purus. Aliquam ultrices egestas elit, nec scelerisque lorem suscipit in. In auctor bibendum ullamcorper. Aenean lectus arcu, fermentum sed aliquet quis, tristique vestibulum est. In nisi ligula, consequat non semper vitae, pharetra vel risus. Nulla odio augue, tincidunt quis bibendum id, ullamcorper vel eros. Proin feugiat imperdiet tellus, ut porttitor massa eleifend in. Praesent sed nisl sed dui vestibulum auctor. Maecenas viverra feugiat erat adipiscing porttitor. Aenean mattis tincidunt placerat.
</p>
<p>
Fusce aliquam, dui a facilisis porttitor, nisi dolor semper dolor, ac vestibulum elit lorem id lorem. Nam ut odio eros. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse consequat tempor volutpat. Vestibulum cursus purus et nulla dignissim suscipit. Cras convallis dolor nec dolor volutpat vel rutrum magna eleifend. Nullam eget lorem orci. Vestibulum vel aliquam ligula.
</p>
<p>
Aliquam in tellus odio, ut gravida ante. Vestibulum vitae diam elementum dui ultricies hendrerit quis vitae ante. Vestibulum vel metus metus. Nulla in nulla et risus dictum lobortis at ac ligula. Nunc in dolor id sapien facilisis porttitor id vitae magna. Integer pretium faucibus felis, vitae tristique est condimentum egestas. Suspendisse potenti. Duis auctor molestie sapien, sed vestibulum dolor ornare in. Praesent lacus purus, luctus non suscipit eget, aliquet in nunc. Etiam bibendum, erat ut blandit vehicula, augue diam vestibulum ipsum, ut imperdiet libero est sit amet tortor. Quisque gravida porttitor augue, eu hendrerit libero ullamcorper eget. Sed at tortor nisi, a luctus nunc. Curabitur in fringilla velit. Nulla elementum hendrerit ante ac faucibus. Mauris ultrices pretium erat sit amet scelerisque.
</p>
<p>
Integer dictum diam vel orci laoreet vehicula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec eu commodo dui. Quisque a diam mauris. Curabitur ornare sollicitudin ligula, in fringilla ligula porttitor et. Proin bibendum tincidunt orci, eget iaculis sem venenatis et. Integer eu eros magna, sed placerat augue. Cras eget est purus. Duis convallis gravida tempus. Curabitur a dolor ut nisl sodales rutrum. Maecenas eget diam quis turpis scelerisque mattis eget ac sapien. Sed commodo mattis tellus, sit amet tempor ligula placerat at.
</p>
<p>
Sed ornare faucibus tincidunt. Sed suscipit metus a massa feugiat dignissim. Maecenas auctor vulputate placerat. Vivamus pulvinar pharetra tincidunt. Nunc tempus ornare interdum. Vestibulum vitae magna lorem, quis luctus augue. Phasellus quam leo, dignissim vitae semper a, iaculis et lacus. Sed elit nunc, interdum sit amet dictum vitae, fermentum eget lorem. Phasellus nisi dui, varius ut lacinia et, condimentum sed tortor. Fusce eu orci et justo rutrum varius sit amet quis enim. Suspendisse id urna eget odio pellentesque lacinia in ut neque. Vestibulum ante lectus, placerat ac mattis vitae, tincidunt quis tortor. Morbi vel sem ut quam dignissim faucibus ut eu lorem. Aliquam laoreet arcu nec urna eleifend consectetur. Suspendisse potenti.
</p>​
Why does clicking on the inline anchor labeled "Bar" not go anywhere on the page?
Your link is looking for an element with the name "bar" not "foo".
Bar would find your H2 if the H2 was <h2 name="bar">Foo</h2> and not <h2 name="foo">Foo</h2> as it is now. You're assigning the html of the H2 element (foo) as the H2's name attribute when you want it to be "bar" which is the html of the anchor.
You can either change your link to Bar or change your jQuery.
Update: Your code should work for most elements, however for the greatest compatibility you might also want to make sure the element has the same ID and name value.
The HTML5 standard suggests using the ID attribute instead of the name attribute for specifying the name of an anchor. Using the ID attribute should work for HTML4 in all modern browsers.
See also: http://www.w3.org/TR/html401/struct/links.html#h-12.2.3 and http://www.w3.org/TR/html5/links.html#hyperlink
It sounds like you instead want to scroll based on the element's position on the page. You should instead find the offset of a specific element (which you can do via jQuery), and then call window.scrollTo(offset) like so:
Bar
$('.scrollableLink').click(function()
{
// Some syntax might not be correct on the selector, but you get the general idea
var offset = $('[name=' + $(this).text() + '").prop('offsetTop');
window.scrollTo(offset);
});
The <a name=''><h2>Lorem Ipsum</h2></a> is the syntax your looking for. I use the wrap function of jQuery to add the correct anchor references. fiddle for your thoughts
javascript
$(function() {
$("h2").each(function(index,elem) {
$(this).wrap("<a name='"+$(this).text().toLowerCase()+"'></a>");
});
});​

Layouting Dojo Mobile App

Hi,
does anybody has any experience with layouting a dojo mobile application? I would like to have a header section in my app and on one page a sub navigation underneath the header followed by a scrollable content section and finally a main navigation at the bottom. Everything should be displayed at a time so that you don’t need to scroll to reach any navigation. Problem is that if I have everything visible, I am no longer able to see everything of the scrollable content section because the navigation is lying over it or if the scrollable content section is fully readable I have to scroll to reach every navigation. Does anybody has any idea how to accomplish that layout? Here is my code and also an example you can watch.
Example: click here
Code:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no"/>
<meta name="apple-mobile-web-app-capable" content="yes" />
<title>Layout</title>
<link href="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dojox/mobile/themes/iphone/iphone.css" rel="stylesheet"></link>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dojo/dojo.xd.js.uncompressed.js"></script>
<script type="text/javascript">
// Use the lightweight parser
dojo.require("dojox.mobile.parser");
// Require Dojo mobile
dojo.require("dojox.mobile");
dojo.require("dojox.mobile.TabBar");
dojo.require("dojox.mobile.ScrollableView");
//Require the compat if the client isn't Webkit-based
dojo.requireIf(!dojo.isWebKit,"dojox.mobile.compat");
dojo.ready(function() {
// Parse the page!
dojox.mobile.parser.parse();
});
</script>
</head>
<body>
<div dojoType="dojox.mobile.View" id="content-1" selected="true">
<div dojoType="dojox.mobile.Heading" id="heading-1">
Heading 1
</div>
<ul dojoType="dojox.mobile.TabBar" barType="segmentedControl" id="top-nav">
<li dojoType="dojox.mobile.TabBarButton" id="top-nav-1" moveTo="content-1-1" selected="true">Top-Nav 1</li>
<li dojoType="dojox.mobile.TabBarButton" id="top-nav-2" moveTo="content-1-2">Top-Nav 2</li>
<li dojoType="dojox.mobile.TabBarButton" id="top-nav-3" moveTo="content-1-3">Top-Nav 3</li>
</ul>
<div dojoType="dojox.mobile.ScrollableView" id="content-1-1" selected="true">
<h3>Content 1-1</h3>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aenean commodo ligula eget dolor. Aenean massa. Cum sociis
natoque penatibus et magnis dis parturient montes, nascetur
ridiculus mus. Donec quam felis, ultricies nec, pellentesque
eu, pretium quis, sem. Nulla consequat massa quis enim. Donec
pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.
In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo.
Nullam dictum felis eu pede mollis pretium. Integer tincidunt.
Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate
eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae,
eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis,
feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet.
Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue.
Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus.
Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper
libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit
vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et
ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus.
Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt.
Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis
magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nun.
</div>
<div dojoType="dojox.mobile.ScrollableView" id="content-1-2">
<h3>Content 1-2</h3>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aenean commodo ligula eget dolor. Aenean massa. Cum sociis
natoque penatibus et magnis dis parturient montes, nascetur
ridiculus mus. Donec quam felis, ultricies nec, pellentesque
eu, pretium quis, sem. Nulla consequat massa quis enim. Donec
pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.
In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo.
Nullam dictum felis eu pede mollis pretium. Integer tincidunt.
Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate
eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae,
eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis,
feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet.
Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue.
Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus.
Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper
libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit
vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et
ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus.
Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt.
Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis
magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nun.
</div>
<div dojoType="dojox.mobile.ScrollableView" id="content-1-3">
<h3>Content 1-3</h3>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aenean commodo ligula eget dolor. Aenean massa. Cum sociis
natoque penatibus et magnis dis parturient montes, nascetur
ridiculus mus. Donec quam felis, ultricies nec, pellentesque
eu, pretium quis, sem. Nulla consequat massa quis enim. Donec
pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.
In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo.
Nullam dictum felis eu pede mollis pretium. Integer tincidunt.
Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate
eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae,
eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis,
feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet.
Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue.
Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus.
Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper
libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit
vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et
ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus.
Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt.
Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis
magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nun.
</div>
</div>
<div dojoType="dojox.mobile.ScrollableView" id="content-2">
<div dojoType="dojox.mobile.Heading" id="heading-2" fixed="top">
Heading 2
</div>
<h3>Content 2-1</h3>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aenean commodo ligula eget dolor. Aenean massa. Cum sociis
natoque penatibus et magnis dis parturient montes, nascetur
ridiculus mus. Donec quam felis, ultricies nec, pellentesque
u, pretium quis, sem. Nulla consequat massa quis enim. Donec
pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.
In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo.
Nullam dictum felis eu pede mollis pretium. Integer tincidunt.
Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate
eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae,
eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis,
feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet.
Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue.
Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus.
Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper
libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit
vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et
ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus.
Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt.
Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis
magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nun.
</div>
<div dojoType="dojox.mobile.ScrollableView" id="content-3">
<div dojoType="dojox.mobile.Heading" id="heading-3" fixed="top">
Heading 3
</div>
<h3>Content 3-1</h3>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aenean commodo ligula eget dolor. Aenean massa. Cum sociis
natoque penatibus et magnis dis parturient montes, nascetur
ridiculus mus. Donec quam felis, ultricies nec, pellentesque
eu, pretium quis, sem. Nulla consequat massa quis enim. Donec
pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.
In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo.
Nullam dictum felis eu pede mollis pretium. Integer tincidunt.
Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate
eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae,
eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis,
feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet.
Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue.
Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus.
Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper
libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit
vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et
ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus.
Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt.
Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis
magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nun.
</div>
<ul id="bottom-nav" dojoType="dojox.mobile.TabBar">
<li id="bottom-nav-1" dojoType="dojox.mobile.TabBarButton" selected="true" moveTo="content-1">Content 1</li>
<li id="bottom-nav-2" dojoType="dojox.mobile.TabBarButton" moveTo="content-2">Content 2</li>
<li id="bottom-nav-3" dojoType="dojox.mobile.TabBarButton" moveTo="content-3">Content 3</li>
</ul>
</body>
</html>
EDIT: To be a bit more precise I made some images which you can find here
I hope these images help to understand what I would like to achive. I would like to have an app layout which has a header, underneath that a sub navigation followed by a content area which is scrollable and finally a footer with the main navigation. Everything should be visible at a time!!! So the content area shoul get the height of the display - header - footer - subNav.
|-------------------------------|
| Header |
|-------------------------------|
| Sub navigation |
|-------------------------------|
| |
| Scrollable content |
| |
| Height = display-height - |
| header - subNav - footer |
| |
|-------------------------------|
| Footer / Main navigation |
|-------------------------------|
I hope a layout like this is possible with Dojo mobile.
Thanks for your support!!!
Ralf
You were almost there. Just make use of fixed="top" and fixed="bottom".
Since you already have the footer outside of the ScrollableView, just add fixed="bottom". According to the docs, you need fixed="top" on the two heading elements, but it seems to work fine without those.
More info here (in particular, see examples at bottom of page): http://docs.dojocampus.org/dojox/mobile/ScrollableView.

Categories